postgresql - 动态 SQL 中的参数串联

标签 postgresql plpgsql dynamic-sql

我想在 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/

相关文章:

Oracle - 根据动态选定的列将数据从一行复制到另一行

postgresql - 有没有办法在没有 CASE 表达式的情况下做到这一点?

Hibernate Lazy 在没有意义的时候加载

java - liquibase gradle postgresql 错误的驱动程序

postgresql - 是否可以在 plpgsql 的 SELECT 中附加 WHERE 子句?

postgresql - 循环遍历并从多个表中选择数据的函数

postgresql - 在 PostgreSQL 中为交叉表动态生成列

postgresql - 执行动态交叉表查询

sql - PostgreSQL 函数 () 中的错误 "relation does not exist"

sql - Postgresql 错误的串行自动递增