Re: ERROR: $1 is declared CONSTANT in plpgsql

From: Jason Davis <jdavis(at)tassie(dot)net(dot)au>
To: Hans Plum <plum(at)giub(dot)uni-bonn(dot)de>
Cc: pgsql-novice(at)postgresql(dot)org
Subject: Re: ERROR: $1 is declared CONSTANT in plpgsql
Date: 2002-05-07 14:08:23
Message-ID: 5.1.0.14.0.20020508000544.02653960@hermes.tassie.net.au
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

Once you declare an ALIAS in a function, you can't change the value of it.
If you need to change it, you must copy the value to a variable that you
declare with the appropriate datatype and change that instead.

cheers,
Jason

>Hello folks,
>I wrote my first plpgsql-functions for PostgreSQL 7.1.3. I try to convert
>Ascii-Strings in HTML-conform Strings (Converting 'Äquator' ->
>'&Auml;quator') ... Now I get a error message like this:
>
>NOTICE: plpgsql: ERROR during compile of f_ascii2html near line 7
>ERROR: $1 is declared CONSTANT
>
>For me $1, or better InpAscii is not CONSTANT ... I cannot find the
>mistake ... Can anybody help out?
>
>Hopefully, you can reproduce the error with the code right here.
>
>Thanks a lot,
>Hans
>
>PS:
>There is some debug-code that I have not used because the functions does
>not work ;-)).
>
>-- BEGIN OF SKRIPT ...
>
>
>DROP TABLE t_ascii2html;
>
>/* table for replacing letters */
>
>CREATE TABLE t_ascii2html (
> ascii VARCHAR(1),
> html VARCHAR(20)
>);
>
>INSERT INTO t_ascii2html VALUES ('ä','&auml;');
>INSERT INTO t_ascii2html VALUES ('ö','&ouml;');
>INSERT INTO t_ascii2html VALUES ('ü','&uuml;');
>INSERT INTO t_ascii2html VALUES ('Ä','&auml;');
>INSERT INTO t_ascii2html VALUES ('Ö','&ouml;');
>INSERT INTO t_ascii2html VALUES ('Ü','&uuml;');
>INSERT INTO t_ascii2html VALUES ('ß','&szlig;');
>INSERT INTO t_ascii2html VALUES ('"','&quot;');
>INSERT INTO t_ascii2html VALUES ('&','&amp;');
>INSERT INTO t_ascii2html VALUES ('<','&lt;');
>INSERT INTO t_ascii2html VALUES ('>','&gt;');
>
>
>DROP FUNCTION f_ascii2html(TEXT);
>
>
>/* Converting 'special' letters (eg. german umlaute like "ö") into a
>HTML-conform string */
>
>CREATE FUNCTION f_ascii2html(TEXT)
> RETURNS TEXT
> AS '
> DECLARE
> InpAscii ALIAS FOR $1;
> CharMap RECORD;
> InsertPosition INTEGER;
> Part1 TEXT;
> Part2 TEXT;
> BEGIN
> InpAscii := $1;
>
> -- Select all datasets from the table describing
> the replacement
> FOR CharMap IN SELECT * FROM f_ascii2html LOOP
> RAISE NOTICE ''CharMap --- ASCII: %,
> HTML: %'', t_ascii2html.ascii, t_ascii2html.html;
>
> WHILE InpAscii ~ CharMap.ascii
> RAISE NOTICE ''INPASCII: %'',
> InpAscii;
> SELECT position(InpAscii IN
> CharMap.ascii)
> INTO InsertPosition;
> RAISE NOTICE ''INSERTPOSITION:
> %'', InsertPosition;
> SELECT substrg(InpAscii FROM
> (InsertPosition - 1))
> INTO Part1;
> RAISE NOTICE ''PART1: %'', Part1;
> SELECT substrg(InpAscii FROM
> (InsertPosition + 1))
> INTO Part2;
> RAISE NOTICE ''PART2: %'', Part2;
> InpAscii := Part1 || CharMap.html
> || Part2 ;
> RAISE NOTICE ''INPASCII: %'',
> InpAscii;
> END LOOP;
> END LOOP;
> RAISE NOTICE ''InpAscii: %'', InpAscii;
> RETURN InpAscii
> END;
> '
>
> LANGUAGE 'plpgsql';
>
>/* Sample: Converting 'Äquator' -> '&Auml;quator' */
>
>select f_ascii2html('Äquator');
>
>/* I get the following error message:
>NOTICE: plpgsql: ERROR during compile of f_ascii2html near line 7
>ERROR: $1 is declared CONSTANT
>*/
>
>
>---------------------------(end of broadcast)---------------------------
>TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)

In response to

Browse pgsql-novice by date

  From Date Subject
Next Message Joshua b. Jore 2002-05-07 14:29:13 Re: Cascaded updates / deletes don't work on inherited
Previous Message Joseph.ROTHWELL 2002-05-07 12:54:59 Problems with psql : ERROR : pg_user: permission denied,and I can 't type \ in psql