Firebird вычисляет значение поля в триггере из запроса
Я пытаюсь заставить этот триггер работать:
Триггер CREATE trig_tbl_art для tbl_art активен до обновления позиции 0 КАК начать ЕСЛИ (NEW.e СТАРО.Е) ТОГДА ЕСЛИ (NEW.f = OLD.f) ТОГДА NEW.f = SELECT (NEW.e)*CAST(row_b AS NUMERIC(9,2)) FROM table_a WHERE row_a = 'someval'; конец
Идея состоит в том, чтобы вычислить значение tbl_art.f только при изменении tbl_art.e.
NEW.f должен быть NEW.e * [значение, возвращаемое из запроса]
Любая помощь, пожалуйста?
1 ответ
Решение
В PSQL вы не можете назначить результат запроса непосредственно переменной... это потому, что запросы могут возвращать несколько столбцов, но вы можете использовать предложение into в вашем операторе select:
SELECT (NEW.e)*CAST(row_b AS NUMERIC(9,2)) FROM table_a WHERE row_a = 'someval'
into NEW.f;
Вы несете ответственность за то, чтобы запрос возвращал только одну строку.