我想在 PostgreSQL 中通过 Pl/pgSQL 更新一行,但出现错误。这是我的代码:
CREATE OR REPLACE FUNCTION "Surrogate_Del"(tablename text, surro uuid)
RETURNS void AS
$BODY$DECLARE
tblname text;
surrogate uuid;
BEGIN
tblname:=tablename;
surrogate:=surro;
execute 'UPDATE'||tblname||'SET ID=NULL WHERE surrogate='||surrogate|| ;
END$BODY$
LANGUAGE plpgsql
这是我要基于它更新记录的 UUID
*syntax Error »ab7«
cd32cdf0-5ab7-11e2-abda-1c4bd605a98d
^*
我该如何解决这个问题?
最佳答案
您需要在参数周围使用转义引号:
execute 'UPDATE ' || tblname || ' SET ID = NULL WHERE surrogate = ''' || surrogate || '''';
mu 的建议更清晰、更可靠:
execute 'UPDATE ' || tblname || ' SET ID = NULL WHERE surrogate = ' || quote_literal(surrogate);
如果是较新版本的 postgresql(我猜是 9.0+)你可以使用 format
函数:
execute format('UPDATE %I SET ID = NULL WHERE surrogate = %L', tblname, surrogate);
%L
将其转义为 SQL 文字。
关于postgresql - 动态 SQL 中的参数串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14242756/