oracle触发器问题

 

id pid
1 0
2 1
3 1

比如oracle表中数据是这样的,怎么定义触发器,比如,更改id=1的id时,使id=2,3的行的pid跟着更改

还有删除id=1的行,pid为1的行也删除

0
liuyinhuan0409
liuyinhuan0409 楼主来了也把问题给结了呗
接近 7 年之前 回复

2个回答

[code="sql"]
create or replace trigger trigger_test
after update or delete on whisky
referencing old as old new as new
for each row
declare
PRAGMA AUTONOMOUS_TRANSACTION;
-- local variables here
begin
--for update
if updating then
update whisky set pid = :new.id where pid = :old.id;
else
--for delete
delete from whisky where pid = :old.id;
end if;
commit;
end trigger_test;

[/code]
我测试是ok的,不知是否满足你的需求。。。

0
liuyinhuan0409
liuyinhuan0409 啊哦啊哦,谢谢
接近 7 年之前 回复
dzq584462393
dzq584462393 你的回答我怎么没收到信息呢,我还以为你没回呢>对不起啊
接近 7 年之前 回复
liuyinhuan0409
liuyinhuan0409 :x :( :x :(
接近 7 年之前 回复
liuyinhuan0409
liuyinhuan0409 忽悠我咧。。。 :cry: :cry: :cry:
接近 7 年之前 回复
liuyinhuan0409
liuyinhuan0409 这个能满足你需求么? 第3行:用来取出trigger触发前、后的新、老值;第6行:声明一个自治事物,一般对本table的操作的trigger需要使用自治事物,不然会引发死锁等其他问题。
接近 7 年之前 回复
dzq584462393
dzq584462393 受不了了,大神就是大神,想请教下3,6行是什么意思,多帮忙下,反正分给你了
接近 7 年之前 回复

[code="java"]
create or replace trigger trig_test_tb
after delete on test_tb
for each row
declare
pragma autonomous_transaction;
begin
delete from test_tb where pid=:old.id;
commit;
end;
[/code]

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!