首页 > 解决方案 > 我的 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;
/

标签: oracleplsqltriggers

解决方案


为什么要声明这些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,因为你从来没有说过应该放什么。

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


推荐阅读