Firebird вычисляет значение поля в триггере из запроса - PullRequest
1 голос
/ 03 апреля 2011

Я пытаюсь заставить этот триггер работать:

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.f только при изменении tbl_art.e.
NEW.f должен быть NEW.e * [значение, возвращаемое из запроса]

Любая помощь, пожалуйста?

1 Ответ

2 голосов
/ 04 апреля 2011

В PSQL вы не можете назначить результат запроса непосредственно переменной ... это потому, что запросы могут возвращать несколько столбцов, но вы можете использовать предложение into в операторе select:

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

Вы несете ответственность за то, чтобы запрос возвращал только одну строку.

...