我想通过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/

10-09 06:07