Re: BUG #1309: PL/PGSQL function: ORDER BY does not accept variables
| От | Tom Lane |
|---|---|
| Тема | Re: BUG #1309: PL/PGSQL function: ORDER BY does not accept variables |
| Дата | |
| Msg-id | 6015.1100040495@sss.pgh.pa.us обсуждение исходный текст |
| Ответ на | BUG #1309: PL/PGSQL function: ORDER BY does not accept variables ("PostgreSQL Bugs List" <pgsql-bugs@postgresql.org>) |
| Список | pgsql-bugs |
"PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:
> DECLARE
> v_MyRow ut_TestSearch%rowtype;
> a_OrderBy ALIAS FOR $1;
> a_SortAsc ALIAS FOR $2;
> BEGIN
> FOR v_MyRow IN
> SELECT Colum1,
> Column2,
> Column3
> FROM Table1
> ORDER BY a_OrderBy a_SortAsc
> LOOP
> RETURN NEXT v_MyRow;
> END LOOP;
You could make that work using FOR ... IN EXECUTE, but as-is it's a syntax
error. You can't use plpgsql variables to interpolate keywords, or even
column names into a regular SQL command; they are *values* and nothing
more. (Indeed it would be exceedingly dangerous if they worked the way
you're supposing.)
Something like
FOR v_MyRow IN EXECUTE
''SELECT Colum1,
Column2,
Column3
FROM Table1
ORDER BY '' || quote_identifier(a_OrderBy) || '' '' || a_SortAsc
LOOP
would do what you intended.
regards, tom lane
В списке pgsql-bugs по дате отправления: