oracle 触发器 select :new,帮忙看下这个oracle触发器,在select后面的where语句有有关问题,但不知道什么有关问题...

博客讨论了Oracle数据库中触发器的使用,特别是更新触发器的逻辑问题。作者指出,原始代码在处理用户状态变更时可能引发逻辑错误,可能导致不正确的数据删除。通过调整WHEN子句的位置和使用IF条件解决了这个问题。同时,文章提醒注意编程规范和逻辑设计的重要性,以避免潜在的问题。
摘要由CSDN通过智能技术生成

delete from flow_status_mgr t where t.ownuserid

= :new.id or t.cususerid = :new.id;

END;

把when放在begin上面就可以了,对了,要是用if怎么用啊,怎么定义啊

------解决方案--------------------------------------------------------

因为你没定义 old as old row啊。。。

------解决方案--------------------------------------------------------

引用

貌似我把if改成when 然后放到begin上面就可以用了

执行语句放在begin前面?? 怎么可能啊。。。

话说我没理解你的数据库设计

如果一个user向一个客户提交了多个纪录

又如果一个user向多个客户都提交了纪录

怎么会因为删除了其中一条记录就删除user对应的department id?

那剩下的纪录对应什么???

而且你删除了整个depart, 那同部门的其他人员对应谁??

你成功的原因也许是只用1 2条记录做的测试

不论从编程规范还是逻辑设计,我都觉得有点问题哦

viewspace-1116891

------解决方案--------------------------------------------------------

引用

create or replace

TRIGGER MODIFYSYSUSER

AFTER UPDATE OF ISACTIVE ON SYS_USER

FOR EACH ROW

WHEN (old.isactive=1and new.isactive=0)

BEGIN

delete from flow_status_mgr t where t.ownuserid

= :new.id or t.cususerid = :new.id;

END;

把when放在begin上面就可以了,对了,要是用if怎么用啊,怎么定义啊

我会写成

TRIGGER MODIFYSYSUSER AFTER UPDATE OF ISACTIVE ON SYS_USER FOR EACH ROW BEGIN IF(old.isactive = land AND new.isactive=0) DELETE FROM ... ...END IF;END;

你的代码写的我太无语了

------解决方案--------------------------------------------------------

中间 and我写了2次 笔误请忽略

------解决方案--------------------------------------------------------

可参考:

Oracle查询语句中的select * from tb1, tb2 where

tb1.id=tb2(id+)这里的(id+)起什么作用啊解决方案 另这里的部分程序错误异常BUG解决方案

%D%A

|

%D%A

oracle存储过程|http://www.myexception.cn/oracle-develop/177537.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值