oracle的级联更新、删除
oracle只有级联删除,没有级联更新 针对需要进行级联更新操作的解决办法如下:
一种做法是通过写存储过程来完成,先将子表更新,再更新主表
这种做法一定要先把约束关系disable掉,再做(子表更新时,主表里没有这个值,违法引用完整性,除非不建立关系)。
先将子表更新,再更新主表
你可以通过数据字典找到约束关系,通过这些关系,确定这个主表都被那些表引用了,然后先更新子表,再更新主表
最后再把约束关系enable
还有一种做法是写触发器
写个例子
Table dd (id number,name varchar(20) 主表
Table cc(id number ,name varchar(20) 从表
create or replace trigger tri_update
after update on cc
for each row
declare
cursor cur_update is select id from dd;
id cc.id%type;
begin
for i in cur_update loop
if id=i.id then update cc
set id = :new.id where id =i.id;
elsif
reise_application_error(-20000, '主表中没有此值 '||:new.id);
end if;
end loop;
end;
更为完整的做法请参考CSDN博文:Oracle 通过触发器级联更新 (http://blog.csdn.net/gcgamer/article/details/7434404)
至于级联删除操作:
create constraint foreign key fk_cc_id on(cc.id) reference dd(id) on delete cascade
能用存储过程就用存储过程。尽量不要使用触发器
那如何办?
假如没有应用服务器,那么DB服务器的负担将加重.
假如要进行数据库的迁移,比方说从SQL Server的数据库迁移到Oracle的话.
那么大量的触发器和存储过程将给你带来很多的麻烦.
因为各个DBMS的语法及处理方式皆不同.
本人小白 以上内容纯属兴趣整理,如有与事实出入望指正,TKS!

浙公网安备 33010602011771号