Проблема. Хотите избежать проблемы изменения триггеров с помощью составного триггера. Но не в силах это сделать
Предыстория. Я хочу вставлять данные в новую таблицу «Таблица отслеживания» всякий раз, когда в основной таблице «CUSTOM_ITEM» происходят изменения.
Дизайн таков, что каждый раз, когда в таблице создается строка, генерируется ITEM_ID, но есть столбец FIRST_ITEM_ID, который в некоторых случаях остается неизменным.
Поэтому всякий раз, когда добавляется новая строка, я хочу проверить ее FIRST_ITEM_ID, а затем проверить всю таблицу и узнать все ITEM_ID, имеющие тот же самый FIRST_ITEM_ID.
И я хочу вставить все эти строки в новую таблицу с помощью триггера.
Это вообще возможно?
Присоединение триггера:
CREATE OR REPLACE TRIGGER APP.TEST_TRG
FOR DELETE OR INSERT OR UPDATE
ON APP.CUSTOM_ITEM
COMPOUND TRIGGER
TYPE t_change_tab IS TABLE OF APP.TEST_TRG.OBJECT_ID%TYPE;
g_change_tab t_change_tab := t_change_tab();
BEFORE EACH ROW IS
BEGIN
Select item_id bulk collect into g_change_tab from CUSTOM_ITEM where first_item_id =
(Select first_item_id from CUSTOM_ITEM where item_id = :NEW.item_id);
For i in 1 .. g_change_tab.COUNT()
LOOP
g_change_tab.extend;
END LOOP;
END BEFORE EACH ROW;
AFTER STATEMENT IS
BEGIN
For i in 1 .. g_change_tab.COUNT()
LOOP
app.bc_acs_pkg.populate_TEST_TRG /* Package Inserts data */
(p_object_type => 'ITEM',
p_object_id => g_change_tab(i));
END LOOP;
g_change_tab.delete;
END AFTER STATEMENT;
END ;
/