Как получить результаты инструкции по изменению данных SQL с применением обновлений триггеров?

#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 . Я, вероятно, разберусь с этим, изменив исходный код.