Firebird计算从查询触发的字段值

时间:2011-04-02 23:49:42

标签: triggers firebird precompute

我正试图让这个触发器工作:

CREATE trigger trig_tbl_art for tbl_art
active before update position 0
AS
begin
  IF (NEW.e  OLD.e) THEN
    IF (NEW.f = OLD.f) THEN
   NEW.f = SELECT (NEW.e)*CAST(row_b AS NUMERIC(9,2)) FROM table_a  WHERE row_a = 'someval';
end

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

请帮忙吗?

1 个答案:

答案 0 :(得分:2)

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

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

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