sql - PostgreSQL中触发器函数的动态查询

标签 sql function postgresql triggers sql-update

我正在尝试在触发器函数中执行动态查询,但我不断收到缺少表“new”的 FROM 子句条目

为什么会出现错误以及如何修复它?

CREATE OR REPLACE FUNCTION "Site"."UpdateAncestorModified"()
  RETURNS trigger AS
$BODY$BEGIN
    EXECUTE
        format
        ('
            UPDATE 
                "' || TG_TABLE_SCHEMA || '"."' || TG_TABLE_NAME || '" 
            SET
                modified = NEW.modified
            WHERE
                id = NEW."ancestorId"
            AND
                modified <> NEW.modified
        ')
    USING
        NEW;
    RETURN NEW;
END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

最佳答案

我必须将 NEW 更改为 ($1),因为它是对第一个绑定(bind)参数的引用。

正确的查询是:

CREATE OR REPLACE FUNCTION "Site"."UpdateAncestorModified"()
  RETURNS trigger AS
$BODY$BEGIN
    EXECUTE
        format
        ('
            UPDATE 
                "' || TG_TABLE_SCHEMA || '"."' || TG_TABLE_NAME || '" 
            SET
                modified = ($1).modified
            WHERE
                id = ($1)."ancestorId"
            AND
                modified <> ($1).modified
        ')
    USING
        NEW;
    RETURN NEW;
END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

关于sql - PostgreSQL中触发器函数的动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23116111/

相关文章:

node.js - Node - Knex 作为连接表的结果返回对象数组

Android Sqlite 添加列后根据条件选择条目

sql - 如何使用 RANK 对匹配记录进行分组

c++ - C++ 函数中对默认第一个参数的支持历史

python - 在同一类python中调用私有(private)函数

sql - 获取相关表中每行的前 5 行

java - Spring boot - 带返回 ID 的 Jdbc 批量插入

php - 在 mySQL 数据库中用 PHP 更新表中的每一行

sql - PostgreSQL - 添加 CONSTRAINT UNIQUE 并且不验证现有数据

php - 从函数中获取变量值