sql - 插入触发器上不存在 Postgres 错误关系 "new"

标签 sql postgresql

下面的触发器执行没有任何错误,但是抛出

ERROR:  relation "new" does not exist

关于将单行插入到 tbl1

CREATE OR REPLACE FUNCTION update_tbl1() 
    RETURNS TRIGGER AS
    $BODY$ DECLARE
DECLARE no_of_rows INT;
BEGIN
    SELECT COUNT(*) as no_of_rows FROM NEW; --error location
         ...
         ...
    COMMIT TRANSACTION
;
END; 
 $BODY$ LANGUAGE plpgsql;
CREATE TRIGGER update_tbl2 AFTER INSERT ON tbl1
     EXECUTE PROCEDURE update_tbl1();

我无法使用 NEW 和 OLD 在 postgres 中引用 INSERTED、DELETED (SQL SERVER) 行,感谢任何帮助。

我需要更新一个类似这样的表

Table-Bill
item  cost  subtotal
itm1  1     1
itm2  5     6
itm3  4     10
itm4  3     13

我的输入是 'item' 和 'cost' 列,触发器需要用到目前为止插入的所有项目的总和更新 'subtotal',我不确定是使用 'FOR EACH ROW' 还是 for statement 然后使用cursor 请帮助提供性能良好的解决方案

最佳答案

FOR EACH STATEMENT 不支持 NEW 和 OLD 用法,因此当前 postgres 中唯一的方法是通过 FOR EACH ROW 访问更新/插入/删除的行查看此帖子以获取更多信息 How to use 'for statement' triggers in postgres?

关于sql - 插入触发器上不存在 Postgres 错误关系 "new",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22526961/

相关文章:

sql - 我如何获得每个外键的最小值

sql - 如何将命名参数传递给postgres中存储过程中的where子句

sql - 如何根据 apache ignite 缓存中的日期获取我的值的总和

postgresql - 提取字符串中特殊字符之间的子字符串

mysql - 使用存储过程游标存储数据的问题

mysql - 在 SELECT 语句之外操作变量

sql - sql中大写字母的拆分词

mysql - 每个父级的内部连接限制

sql - PostgreSQL - 状态字段的正确索引选择(varchar)

java - Liquibase.properties 读取环境变量