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
更為完整的做法請參考csdn博文:oracle 通過觸發器級聯更新 (
至於級聯刪除操作:
建foreign key 時這樣建立:
create constraint foreign key fk_cc_id on(cc.id) reference dd(id) on delete cascade
以上內容來自csdn:對主表怎樣進行級聯更新,刪除(語句) ,本人菜鳥對觸發器不了解,特別在網上查了一些資訊:
觸發器是一種特殊型別的儲存過程,當使用下面的一種或多種資料修改操作在指定表中對資料進行修改時,觸發器會生效:update、insert 或 delete。
觸發器是自動的:它們在對錶的資料作了任何修改(比如手工輸入或者應用程式採取的操作)之後立即被啟用。
觸發器是在 update,delete,insert 表之後引發的的特殊儲存過程 以後無論多少程式,只要修改此表,就會自動呼叫此過程,而無須在程式中呼叫
簡單地說觸發器是當對錶進行增、刪、改時執行的sql語句,功能上和儲存過程一樣。顧名思義,一觸即發。
觸發器是自動執行的,儲存過程必須在程式中顯示呼叫!
能用儲存過程就用儲存過程。盡量不要使用觸發器
假如你是多人使用的﹐觸發器最好少用﹐因為﹐如果兩個人同時觸發了觸發程式
那如何辦?
假如沒有應用伺服器,那麼db伺服器的負擔將加重.
假如要進行資料庫的遷移,比方說從sql server的資料庫遷移到oracle的話.
那麼大量的觸發器和儲存過程將給你帶來很多的麻煩.
因為各個dbms的語法及處理方式皆不同.
本人小白 以上內容純屬興趣整理,如有與事實出入望指正,tks!
Oracle系列 級聯刪除和級聯更新
必須宣告 此部落格 於oracle外來鍵級聯刪除和級聯更新 鑑於此前收藏的精彩部落格無料被刪除了,很是痛心,所以還是要複製一下 一 級聯刪除 oracle在外鍵的刪除上有no action 類似restrict cascade和set null三種行為。下面以學生 班級為例說明不同情況下的外來鍵刪除...
Oracle外來鍵級聯刪除和級聯更新
oracle在外鍵的刪除上有no action 類似restrict cascade和set null三種行為。下面以學生 班級為例說明不同情況下的外來鍵刪除,學生屬於班級,班級的主鍵是學生的外來鍵。班級表 crate table tb class id number not null,班級主鍵 n...
Oracle外來鍵級聯刪除和級聯更新
oracle在外鍵的刪除上有no action 類似restrict cascade和set null三種行為。下面以學生 班級為例說明不同情況下的外來鍵刪除,學生屬於班級,班級的主鍵是學生的外來鍵。班級表 crate table tb class id number not null,班級主鍵 n...