我想通过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+I猜想),您可以使用
format
函数:execute format('UPDATE %I SET ID = NULL WHERE surrogate = %L', tblname, surrogate);
%L
将其作为SQL文本转义。关于postgresql - 动态SQL中的参数串联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14242756/