Обсуждение: problem with plpgsql function
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
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