On Thu, 5 Feb 2009, Eduard Deacoon wrote: > For example: > --- Function convert column to string with delimiter > --- $1 - TABLE with COLUMN to convert > --- $2 - COLUMN to convert > --- $3 - COLUMN for WHERE CLAUSE > --- $4 - WHERE value > --- $5 - delimeter > --- In fact: SELECT $2 FROM $1 WHERE $3 = $4 returning as string with > delimiter $5 > CREATE OR REPLACE FUNCTION column_to_string(TEXT, TEXT, TEXT, TEXT, TEXT) > RETURNS TEXT AS > E' > DECLARE > string_res TEXT := NULL; > r RECORD; > BEGIN > FOR r IN EXECUTE ''SELECT '' || QUOTE_IDENT($2) || '' AS t '' || '' > FROM '' || QUOTE_IDENT($1) || '' > WHERE '' || QUOTE_IDENT($3) || '' = '' || > $4||''::TEXT'' || > '' ORDER BY '' || QUOTE_IDENT($2) || '' ASC''
The output of that is going to look something like SELECT "Valueof$2" AS t FROM "Valueof$1" WHERE "Valueof$3" = Valueof$4::text ORDER BY "Valueof$2" ASC. So, given say a call with ('a', 'b', 'c', '003', ',') you'll get SELECT "b" AS t FROM "a" WHERE "c" = 003::text ORDER BY "b" ASC In that case, when executed the 003 is going to be treated as a number (and thus is the same as 3). If you wanted the 003 to be treated as a string literal in the string to be executed, you need to quote it, preferably with quote_literal. -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs