Удалите слово TABLE
из оператора CREATE TRIGGER
:
CREATE TRIGGER DB2ADMIN.SUPPLIES_I
AFTER UPDATE OF QUANTITY ON DB2ADMIN.SUPPLIES
REFERENCING NEW AS n
OLD AS o
FOR EACH ROW MODE DB2SQL NOT SECURED
BEGIN ATOMIC
INSERT INTO db2admin.tran_log VALUES (USER, CURRENT TIMESTAMP || ' ' || n.itemname || ' ( ' || o.itemid || ' ) from ' || CHAR(o.quantity) || ' to ' || CHAR(n.quantity));
END
Вы не можете ссылаться на переменную перехода таблицы так, как пытаетесь.Представьте, что мы создаем таблицу new
, как показано ниже.
Это возможно:
with n(i) as (values 1, 2, 3)
select i
from n;
Это невозможно, и вы получаете то же сообщение об ошибке:
with n(i) as (values 1, 2, 3)
values (n.i);
Альтернативное решение с FOR EACH STATEMENT
триггером
Если у вашей таблицы есть ключ (один или несколько столбцов), и он не содержит обновленный столбец QUANTITY
:
CREATE TRIGGER DB2ADMIN.SUPPLIES_I2
AFTER UPDATE OF QUANTITY ON DB2ADMIN.SUPPLIES
REFERENCING NEW TABLE AS n
OLD TABLE AS o
FOR EACH STATEMENT
INSERT INTO db2admin.tran_log
SELECT USER, CURRENT TIMESTAMP || ' ' || n.itemname || ' ( ' || o.itemid || ' ) from ' || CHAR(o.quantity) || ' to ' || CHAR(n.quantity)
FROM n, o
WHERE n.<key>=o.<key>