oracle - 我的 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;
/
而不是v4
和v5
我插入NULL
,因为你从来没有说过应该放什么。
此外,作为一种好的做法,您应该始终指定您正在使用的列列表。这就是我编造这些列名的原因,因为我不知道它们的真实姓名,但你知道并且应该使用它们。
推荐阅读
- angular - Zuul 没有路由到 Angular 资源
- postgresql-13 - 删除记录,忽略外键违规导致的失败
- python - 计算 numpy 数组和 csr_matrix 之间的成对最小值的最有效方法
- python - 如何对多个数组执行带有if条件的追加
- javascript - JavaScript - 一次单击两次追加的 Div 元素
- function - 将实时 CMD 输出发送到函数
- flutter - 从文件名字符串获取文件扩展名
- outlook-addin - Outlook 加载项在后台发送电子邮件
- testing - Redux-observable 测试和丢失我的 Marbles
- c# - 运行 Asp.net 应用程序时出现解析器错误