#sql #db2 #db2-luw
Вопрос:
У меня есть требование, в котором мне нужно получить немедленный результат инструкции update. Я увидел, что могу сделать это с помощью модификаторов SQL-оператора изменения данных. Однако я не могу получить окончательный результат после применения всех связанных триггеров. Например, допустим, у меня есть следующий запрос:
SELECT empno, salary FROM FINAL TABLE
(UPDATE employee SET salary = salary * 1.10 WHERE job = 'CLERK')
И давайте предположим, что у меня есть триггер, который выполняет следующее:
CREATE TRIGGER EXTRA_PAY_RISE AFTER UPDATE ON employee
REFERENCING OLD AS oldrow
NEW AS newrow
FOR EACH ROW MODE DB2SQL
WHEN (newrow.dept = 'sales')
UPDATE employee SET salary = salary * 1.01 WHERE name = newrow.name;
Как я могу получить результат из первого оператора select, содержащего обновления, применяемые всеми связанными триггерами (если это возможно)?
Ответ №1:
Используйте BEFORE UPDATE
триггер и либо NEW TABLE
(в любом случае), либо FINAL TABLE
(если у вас нет AFTER UPDATE
триггеров).
Если вы не можете использовать BEFORE
триггер для реализации логики обновления, то вы не можете использовать оператор изменения данных для достижения своей цели.
Комментарии:
1. Да, я думаю, что это решение может быть полезно другим людям, которые столкнутся с подобными проблемами в будущем. Но в моем случае мне нужно использовать
AFTER UPDATE
. Я, вероятно, разберусь с этим, изменив исходный код.