2016-11-22 79 views
0

我在表B中有一個外鍵給表A.我想要的是,在A中刪除記錄,使用級聯刪除或級聯設置B中的FK字段中的NULL取決於該記錄的某一列中的值應該被刪除。oracle刪除級聯條件

至於我不能在刪除級聯使用條件下,我的想法是要始終使用級聯SET NULL,並添加觸發器表B

AFTER UPDATE.. 
FOR EACH ROW 
BEGIN 
    IF :new.a = 1 THEN 
     DELETE FROM B WHERE ID = :new.id 
    ENDIF; 
END; 

但我得到一個錯誤,smthing如「表變異,觸發器/功能可能看不到它「。

所以,我改變了我的if-else到過程調用

AFTER UPDATE 
BEGIN 
    cleanup_table_b(); 
END; 

create or replace procedure cleanup_table_b 
IS begin  
    DELETE FROM B WHERE a = 1;  
end; 

但仍然出現錯誤ORA-04091,ORA-06512,ORA-04088

的的企業經營理念,是B中的記錄仍然可以是有用的(不是通過外鍵),所以我想執行一個清理和刪除用途記錄。

+1

在表A上使用刪除觸發器刪除或設置null引用記錄在表B中。 – Rene

+0

@Rene是的,但是這使得一張桌子保持另一個。更好的結構解決方案將是如果一張桌子可以保持自己 – user1448906

+0

你必須解釋你爲什麼認爲這是「更好」。 – Rene

回答

0

以下desicion被實施。在表A中使用了「on delete」觸發器來刪除或設置表B中引用記錄的空值。因此刪除觸發器運行了清除B