Ошибка кажется довольно очевидной - у вас есть триггер уровня оператора, а не триггер уровня строки (без for each row
предложения), и вы не можете использовать старые / новые псевдозаписи на уровне оператора .
Так как это действительно то, чего вы хотите, вам нужно добавить это предложение:
create or replace trigger before_delete
before delete
on accounts
for each row
begin
insert into accounts_history
(
id,
new_name,
old_name,
new_amount,
old_amount,
change_date,
delted_by
)
values
(
:old.acc_id,
:old.acc_name,
:old.acc_name,
:old.acc_amount,
:old.acc_amount,
sysdate,
user
);
end;
/
Вам не нужно запрашивать из dual, чтобы получить user
в переменную, вы можете назначить его напрямую; но вам вообще не нужна эта переменная; Вы можете ссылаться на user
call непосредственно в предложении values
.