我的PL/SQL代码中有一个编译错误,如果在client_master 上发生任何更新或删除,audit_client表将被更新
create or replace trigger t1
after update or delete on client_master
for each row
DECLARE
v1 varchar2(10);
v2 varchar2(80);
v3 number(11);
oper varchar2(15);
BEGIN
v1:= :old.CLIENT_NO
v2:= :old.NAME
v3:= :old.BALANCE
if updating then
oper:='update'
insert into audit_client values(v1,v2,v3,oper,v4,v5);
end if;
if deleting then
oper:='delete'
insert into audit_client values(v1,v2,v3,oper,v4,v5);
end if;
end;
/
为什么要声明那些v
变量?有点简化:
create or replace trigger t1
after update or delete on client_master
for each row
declare
l_oper varchar2(15);
begin
if updating then
l_oper := 'update';
elsif deleting then
l_oper := 'delete';
end if;
insert into audit_client
(client_no, name, balance, oper, col4, col5)
values
(:old.client_no, :old.name, :old.balance, l_oper, null, null);
end;
/
我插入的不是v4
和v5
,而是NULL
,因为您从未说过应该放什么。
此外,作为一种良好的做法,您应该始终指定您正在使用的列列表。这就是为什么我编了这些列名,因为我不知道它们的真实名称,但你知道,你应该使用它们。