oracle触发器不稳定,糟糕,Oracle触发器(2)-骗不过它

想到一个办法绕过触发器的问题,就是再建一个log表,来存储修改的ID,U_SMRYGL表的触发器只是负责把数据的关键字插入log表。

然后再log表上再建个insert的触发器,由这个触发器来完成U_SMRYGL的数据更新。

create or replace trigger tg_APP_del_U_SMRYGL

AFTER delete  on U_SMRYGL

for each row

declare

MY_N_ORDER NUMBER;

MY_N_ID NUMBER;

my_n_num NUMBER;

MY_N_MIN_ORDER NUMBER;

MY_N_MIN_ID NUMBER;

my_n_min_num NUMBER;

begin

insert into pp_log(userid,tablename) values(:OLD.USERID,'U_SMRYGL');

end tg_APP_del_U_SMRYGL;

create table pp_log

(userid varchar2(30),

tablename varchar(200)

)

create or replace trigger tg_APP_pp_log

before insert  on pp_log

for each row

declare

MY_N_ORDER NUMBER;

MY_N_ID NUMBER;

my_n_num NUMBER;

MY_N_MIN_ORDER NUMBER;

MY_N_MIN_ID NUMBER;

my_n_min_num NUMBER;

begin

SELECT MAX(NVL(ORDERNO,0)) INTO MY_N_ORDER FROM U_SMRYGL WHERE USERID= :NEW.USERID ;

SELECT MAX(ID) INTO MY_N_ID FROM U_SMRYGL WHERE USERID= :NEW.USERID AND ORDERNO = MY_N_ORDER;

UPDATE T_EMPLOYEE SET (SHEMIEND) = (SELECT ENDDATE FROM U_SMRYGL WHERE ID=MY_N_ID)

WHERE USERID=:OLD.USERID;

end tg_APP_pp_log;

结果就是我的小伎俩没有骗过Oracle,

13cda4298d90ff3d9bd167b1e06508b0.gif从后台的出错信息中可以看出,这个调用关系是:

1先调用U_SMRYGL的触发器

2调用log表的触发器

3返回调用U_SMRYGL的触发器(就是这个返回,我就这么死了。这么一返回,我就违反规则了

46962c78a2e77bec51c2f0692e467398.gif)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值