problem with plpgsql function

Started by Alex Guryanowover 25 years ago2 messagesgeneral
Jump to latest
#1Alex Guryanow
gav@nlr.ru

Hi,

I have a table "isbn" (postgres-7.0.2) with two columns:

book_id int4
isbn varchar(20)

I want to create a function that joins all isbn for specified book_id.
The code of this function is:

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';

But when i execute the query

book=> select all_isbn2(1);

I receive the following error:

ERROR: Attribute '' not found

What I'm doing wrong?

Regards,
Alex

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alex Guryanow (#1)
Re: problem with plpgsql function

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