为什么postgres不接受函数参数作为表名

don*_*nut 0 postgresql function plpgsql

我正在使用下面的函数尝试更新表.表名是函数参数.运行此函数会导致错误:

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;
Run Code Online (Sandbox Code Playgroud)

Pet*_*aut 5

使用EXECUTEquote_ident是正确的解决方案.如果您遇到问题,可能需要显示该代码.