У меня есть куча триггеров по таблицам в DB2 для iseries. Они напрямую пишут в другие таблицы, но меня попросили изменить их, чтобы триггеры вместо этого вызывали что-то еще для записи.
Я знаю, что эта что-то еще часть немного расплывчата. Я бы предположил, что не могу вызвать триггер из другого триггера (поправьте меня, если я ошибаюсь), поэтому я полагаю, что это должна быть хранимая процедура. Есть ли в DB2 что-то вроде "программы", которую я мог бы вызвать вместо этого?
Предполагая, что это хранимая процедура, как мне передать OLDROW и NEWROW для обработки в SP?
Например, триггер может выглядеть примерно так (конечно, в упрощенном виде):
CREATE TRIGGER MYSCHEMA.WHATEVERTABLE_AFTER_INSERT_TRIGGER
AFTER INSERT ON MYSCHEMA.MYTABLE
REFERENCING NEW AS NEWROW
FOR EACH ROW
MODE DB2ROW
SET OPTION ALWBLK = *ALLREAD ,
ALWCPYDTA = *OPTIMIZE ,
COMMIT = *CS ,
DECRESULT = (31, 31, 00) ,
DFTRDBCOL = *NONE ,
DYNDFTCOL = *NO ,
DYNUSRPRF = *USER ,
SRTSEQ = *HEX
WHEN ( 1 = 1 )
BEGIN ATOMIC
INSERT INTO NEWSCHEMA.NEWTABLE
(
AAA,
BBB,
CCC
)
VALUES
(
NEWROW.AAA,
NEWROW.BBB,
NEWROW.CCC
);
END;
Триггеру просто нужно реплицировать таблицу большую часть времени, поэтому мне иногда нужен доступ к OLDROW, а иногда к NEWROW, а иногда и к тому и другому. Однако я считаю, что это имеет смысл только в контексте триггера, так как мне передать эту информацию в SP?