Доброго времени!
Допустим есть таблицы:
CREATE TABLE AnyTable (AT_ID number(9) not null primary key);
CREATE TABLE QueryLog (QL_AT_ID number(9) not null references AnyTable,
QL_Date date,
QL_SQLText varchar2 (2000));
Пытаюсь написать триггер на изменение в таблице:
CREATE OR REPLACE TRIGGER ModifyAnyTable
AFTER INSERT OR UPDATE OR DELETE ON AnyTable
FOR EACH ROW
DECLARE
my_sql_text ora_name_list_t;
n number;
my_sql varchar2(2000);
BEGIN
n := ora_sql_txt(my_sql_text);
for i in 1..n loop
my_sql := my_sql || my_sql_text(i);
end loop;
if deleting then
delete from QueryLog
where QL_AT_ID = :old.AT_ID;
else
insert into QueryLog (QL_AT_ID, QL_Date, QL_SQLText)
values (:new.AT_ID, sysdate, 'test');
end if;
EXCEPTION
when DUP_VAL_ON_INDEX then
update QueryLog
set QL_Date = sysdate, QL_SQLText = 'test'
where QL_AT_ID = :new.AT_ID;
END;
/
Триггер создается без ошибок, но при обновлении записи в AnyTable вываливает ошибку:
ORA-06502: PL/SQL: ошибка числа или значения ORA-06512: на "SYS.ModifyAnyTable", line 9 ORA-04088: ошибка во время выполнения триггера 'SYS.ModifyAnyTable.....