我的PL/SQL代码中有一个编译错误



我的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;
/

我插入的不是v4v5,而是NULL,因为您从未说过应该放什么。

此外,作为一种良好的做法,您应该始终指定您正在使用的列列表。这就是为什么我编了这些列名,因为我不知道它们的真实名称,但你知道,你应该使用它们。

相关内容

最新更新