日期:2014-05-17  浏览次数:20947 次

级联删除触发器
二个有外键关系的表,当删除主表一条记录时,级联删除子表的相关记录
希望各位能够给出一些PL/SQL的相关语句
谢谢!

------解决方案--------------------
我将我写的详细的过程给lz讲下撒:
(1)创建deptment表
create table deptment(id varchar2(10) primary key,name varchar2(10)not null);
(2)创建emp表,如下
create table emp(eid varchar2(10),salary number(8,2),constraint fk_eid foreign key(eid)references deptment(id));
(3)建立级联触发器,语句如下
create or replace trigger del(这个是触发器的名字,可随便取撒)
after delete on deptment 
for each row --这一行表示这是个行级触发器哦
delete from emp where eid=:old.id;
end del;
/
lz只要给deptment表和emp表先插入数据再创建这个触发器,然后写下面语句就可以知道这个触发器的功能了
delete from deptment where id='001';(假设deptment和emp表都有id为001的数据)
select * from emp;
这个时候你会发现emp表中的eid='001'的数据也没了!!!
------解决方案--------------------
请弄清楚一件事情,如果做了外键关联,
删除主表数据之前,明细表的数据一定要先删除的。
哪有可能删除主表数据后再做明细删除的
------解决方案--------------------
create or replace trigger del(这个是触发器的名字,可随便取撒)
after delete on deptment --------这里应该是beforefor each row --这一行表示这是个行级触发器哦
delete from emp where eid=:old.id;
end del;

------解决方案--------------------
create or replace trigger del(这个是触发器的名字,可随便取撒)
after delete on deptment --------这里应该是beforefor each row --这一行表示这是个行级触发器哦
delete from emp where eid=:old.id;
end del;

------解决方案--------------------
create or replace trigger del(这个是触发器的名字,可随便取撒)
after delete on deptment --------这里应该是before
for each row --这一行表示这是个行级触发器哦
delete from emp where eid=:old.id;
end del;