postgresql传递表引用函数

时间:2014-05-27 09:24:34

标签: postgresql reference

如何将表引用传递给函数?我尝试了下面的代码但是我遇到了错误:

CREATE OR REPLACE FUNCTION merge_(text,n VARCHAR(32),s VARCHAR(32),val int) RETURNS VOID AS 
$$
  DECLARE
    _table ALIAS FOR $1;
  BEGIN
    RAISE NOTICE '_table = %', _table;
...


SELECT merge_('testtable','h','a',50000);

注意:_table = testtable

这很好用,但是当我尝试执行命令时出现错误:

CREATE OR REPLACE FUNCTION merge_(text,n VARCHAR(32),s VARCHAR(32),val int) RETURNS VOID AS 
$$
 DECLARE
    _table ALIAS FOR $1;
 BEGIN
    UPDATE _table ....
  

错误:关系“_table”不存在

1 个答案:

答案 0 :(得分:1)

动态命令中的变量替换必须使用EXECUTE命令完成:

EXECUTE 'UPDATE ' || quote_ident(_table) || ' ....';

您可以查看文档here

如果要使用参数将关系或列名称插入动态命令,则应使用quote_ident()函数。应使用WHERE column_name = parameter_2函数插入其他文本元素(例如quote_literal())。这两个函数都有助于避免讨厌的冲突(比如双引号保留字)和防止SQL注入。