【问题标题】:postgresql pass table reference to the function [duplicate]postgresql将表引用传递给函数[重复]
【发布时间】:2014-07-16 03:30:01
【问题描述】:

如何将表引用传递给函数?我尝试了以下代码,但出现错误:

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 = 测试表

这工作正常,但是当我尝试执行命令时出现错误:

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”不存在

【问题讨论】:

    标签: postgresql reference


    【解决方案1】:

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

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

    您可以查看文档here

    无论您想在何处使用参数将关系或列名插入到动态命令中,您都应该使用quote_ident() 函数。其他文本元素(例如WHERE column_name = parameter_2)应使用quote_literal() 函数插入。这两个函数都有助于避免令人讨厌的冲突(如双引号保留字)并防止 SQL 注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 2013-07-04
      • 2018-09-11
      • 2015-06-06
      • 2022-01-26
      相关资源
      最近更新 更多