1

我正在尝试使此触发器起作用:

为 tbl_art 创建触发器 trig_tbl_art
在更新位置 0 之前激活
作为
开始
  IF (NEW.e OLD.e) THEN
    如果(新.f = 旧.f)那么
   NEW.f = SELECT (NEW.e)*CAST(row_b AS NUMERIC(9,2)) FROM table_a WHERE row_a = 'someval';
结尾

这个想法是仅在 tbl_art.e 更改时计算 tbl_art.f 的值。
NEW.f 应该是 NEW.e * [查询返回的值]

请问有什么帮助吗?

4

1 回答 1

3

在 PSQL 中,您不能将查询的结果直接分配给变量……这是因为查询可以返回多个列,但您可以在 select 语句中使用 into 子句:

SELECT (NEW.e)*CAST(row_b AS NUMERIC(9,2)) FROM table_a  WHERE row_a = 'someval'
 into NEW.f;

您有责任确保查询仅返回一行。

于 2011-04-04T00:16:44.433 回答