如何将表引用传递给函数?我尝试了下面的代码但是我遇到了错误:
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”不存在
答案 0 :(得分:1)
动态命令中的变量替换必须使用EXECUTE
命令完成:
EXECUTE 'UPDATE ' || quote_ident(_table) || ' ....';
您可以查看文档here。
如果要使用参数将关系或列名称插入动态命令,则应使用quote_ident()
函数。应使用WHERE column_name = parameter_2
函数插入其他文本元素(例如quote_literal()
)。这两个函数都有助于避免讨厌的冲突(比如双引号保留字)和防止SQL注入。