如何在update一个记录的时候,同时更新自己

「已注销」 2009-06-03 08:52:35

create table test
(
id number,
status varchar2(10)
)
/
--测试表

实现功能:当发生test 被update的时候,并且status='UNC'的时候,把status='MOD'
考虑到用触发器:

CREATE OR REPLACE TRIGGER TRI_on_test
AFTER update
ON test
REFERENCING OLD AS O NEW AS N
FOR EACH ROW
BEGIN
IF update(test.status)&& :N.status='UNC' THEN
update test t set status='MOD' where t.rowid=:N.rowid and t.status='MOD';
END IF;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(SQLCODE,SQLERRM);
END;


但是这样有个问题,没办法在更新表的同时,再更新自己,请问有没有办法实现这样的功能?
...全文
133 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 suncrafted 的回复:]
已经有人解决,帮顶下
[/Quote]
谢谢,我已经结贴了,要不给你一分,哈哈。
suncrafted 2009-06-03
  • 打赏
  • 举报
回复
已经有人解决,帮顶下
「已注销」 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fosjos 的回复:]
before update
for each row

IF :new.status='UNC' and (:old.status is null or :old.status <>'UNC')
THEN
:new.status := 'MOD';
END IF;
[/Quote]

理论上应该可以,刚才没有看到你改了before,呵呵,我试下,谢谢兄弟。
「已注销」 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fosjos 的回复:]
before update
for each row

IF :new.status='UNC' and (:old.status is null or :old.status <>'UNC')
THEN
:new.status := 'MOD';
END IF;
[/Quote]

这样不行,提示不能给新值赋值的,呵呵。
fosjos 2009-06-03
  • 打赏
  • 举报
回复
before update
for each row

IF :new.status='UNC' and (:old.status is null or :old.status<>'UNC')
THEN
:new.status := 'MOD';
END IF;

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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