oracle 触发器 如何修改另一条记录?

Ngod 2016-01-13 10:55:34
我有一个库存的表,有库位,优先级,和名称之类的列,库位能表示上层和下层,我想做一个触发器,在有上层货物到时,将下层的货物优先级修改小一些,我写了一个总是出错,请问高手怎么解决?

CREATE OR REPLACE TRIGGER PROVIEW.TRI_COILS2
AFTER INSERT OR UPDATE
ON PROVIEW.COILS1
FOR EACH ROW
DECLARE
V_NUM1 NUMBER(2);
V_NUM2 NUMBER(2);
V_VAR1 VARCHAR(4);
V_NUM3 NUMBER(4);
BEGIN
IF UPDATING THEN
BEGIN
V_NUM2 := TO_NUMBER(SUBSTR(:NEW.UF3,3,2));
V_NUM1 := TO_NUMBER(SUBSTR(:NEW.UF3,1,2));
V_NUM3 := TO_NUMBER(SUBSTR(:NEW.UF3,1,4));
V_VAR1 := TO_CHAR((V_NUM3-20));
IF ((V_NUM1>=1 AND V_NUM1<=23) AND (V_NUM2>=21 AND V_NUM2<=32) AND:NEW.FLAG = 119 ) THEN
UPDATE COILS1 SET PRIORITY = 0 WHERE UF3 = V_VAR1 AND FLAG = 119;
END IF;
END;
END IF;

END;
...全文
269 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘大神仙 2016-01-14
  • 打赏
  • 举报
回复
弄两张表就可以了。。
小灰狼W 2016-01-13
  • 打赏
  • 举报
回复
AUTONOMOUS TRANSACTION 可以搜下自治事务。如果使用自治事务,事务的末尾要commit 但这样也会造成一个问题,例如: 你往COILS1表中插入一条记录,触发了触发器 此时,自治事务里是看不到这条记录的,因为该记录尚未提交,而自治事务和当前事务属于两个事务 再者,你在自治事务里提交,触发器中的更改即已生效。此时如果你的当前事务没有提交,而是回滚,自治事务中的却不会回滚。可能会造成数据不一致 所以需要权衡一下。触发器并不建议使用
Ngod 2016-01-13
  • 打赏
  • 举报
回复
前端程序没有源代码,没法修改,只能出此下策,有什么办法可以修改,麻烦给详细说一下。
小灰狼W 2016-01-13
  • 打赏
  • 举报
回复
不能更新自己,除非使用自治事务 但是不建议使用触发器来实现,应该在前端插入或更新数据时来做这一步

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧