Re: problem with plpgsql function - Mailing list pgsql-general

From Tom Lane
Subject Re: problem with plpgsql function
Date
Msg-id 2418.966008212@sss.pgh.pa.us
Whole thread Raw
In response to problem with plpgsql function  (Alex Guryanow <gav@nlr.ru>)
List pgsql-general
Alex Guryanow <gav@nlr.ru> writes:
>    CREATE FUNCTION all_isbn2( int4 ) RETURNS varchar AS 'DECLARE
>    i isbn%ROWTYPE;
>    res varchar;
>    BEGIN res := "";
>    FOR i IN SELECT * FROM isbn WHERE isbn.book_id = $1 LOOP
>    res := res || i.isbn;
>    END LOOP;
>    RETURN res;
>    END;' LANGUAGE 'plpgsql';

> ERROR:  Attribute '' not found

> What I'm doing wrong?

You need to write
    BEGIN res := '''';
Double quotes "" imply a variable or column name, not a string literal.
You need 4 quotes not 2 because you're inside a ' literal already
(you could also write res := \'\' if that seems clearer).

It occurs to me that we ought to make a push to consistently use
double-quotes not single-quotes in error messages that are reporting
names.  If the error had been
    ERROR:  Attribute "" not found
you might've figured out your mistake without help...

            regards, tom lane

pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: insert into table from select..
Next
From: Tom Lane
Date:
Subject: Re: NOTIFY from PL/pgSQL trigger procedure