我正在尝试使用以下函数更新表格。表名是函数参数。运行此函数会导致错误:
ERROR: syntax error at or near "$1"
LINE 1: (SELECT * FROM $1 ORDER BY $2 )
我尝试使用EXECUTE语句和quote_ident函数,但没有成功。我确定我忽视了一些简单的事情......
CREATE OR REPLACE FUNCTION createdefaultorder(table_name varchar, sort_column varchar)
RETURNS integer AS
$BODY$
DECLARE
rRec RECORD;
counter integer := 0;
BEGIN
FOR rRec IN (SELECT * FROM table_name ORDER BY sort_column) LOOP
UPDATE table_name SET row_number = counter WHERE id = rRec.id;
counter := counter + 1;
END LOOP;
RETURN 0;
END;
$BODY$
LANGUAGE plpgsql;
答案 0 :(得分:5)
使用EXECUTE
和quote_ident
是正确的解决方案。如果您遇到问题,可能需要显示该代码。
答案 1 :(得分:0)
Execute
和quote_ident
是该问题的解决方案:PostgreSQL 8.4 Manual
答案 2 :(得分:0)
您必须在动态查询执行中使用EXECUTE和quote_ident(),如下所示:
BEGIN FOR rRec IN EXECUTE 'SELECT * FROM ' || quote_ident(table_name) || ' ORDER BY ' || quote_ident(sort_column) LOOP EXECUTE 'UPDATE ' || quote_ident(table_name) || ' SET row_number = ' || counter || ' WHERE id = ' || rRec.id; counter := counter + 1; END LOOP; RETURN 0; END;