2014-09-13 120 views
0

好吧,所以我一直在這個問題上停留了大約2個小時,而且我仍然找不到解決方案。oracle觸發刪除

我有2個數據庫實例。

網站1具有讓說, 表A ID attrib1 FOREIGNKEY - (B表的主鍵)

站點2擁有, 表B ID attrib1

我想創建刪除表A記錄的觸發器。它基本檢查站點2表B是否具有對該特定記錄的引用。如果它確實有這個記錄,我想阻止刪除發生。到目前爲止,我想出了這個,

CREATE OR REPLACE TRIGGER CHECK_DEALERSHIP_USAGE 
BEFORE DELETE on TBL_CARDEALERSHIP 
FOR each ROW 
declare 
    rowcnt number; 
    begin 
    SELECT COUNT(DEALERSHIP_ID) INTO rowcnt 
    from [email protected] 
    where DEALERSHIP_ID = :NEW.DEALERSHIP_ID; 
    if (rowcnt>0) THEN 
    Raise_Application_Error (-20100, 'This dealership is used in the sales people table.'); 
    end if; 
end; 

然後我做到這一點,

delete from TBL_CARDEALERSHIP 
where DEALERSHIP_ID='83'; 

但它仍然會刪除它,甚至認爲我有一個記錄在數據庫中

+2

在刪除觸發器中,您需要引用**舊**記錄,例如, 'DEALERSHIP_ID =:OLD.DEALERSHIP_ID;' – DrabJay 2014-09-13 16:08:15

回答

0

由於DrabJay放它在註釋中,刪除觸發器中的NEW記錄是NULL,因爲它在刪除之後。

但坦率地說,你會犯這個錯誤。這種事情應該用外鍵來完成,而不是觸發器。

CREATE TABLE TBL_CARDEALERSHIP (
    ... columns ... 
    CONSTRAINT fk_salesppl FOREIGN KEY (dealership_id) 
     REFERENCES tbl_salespeople (dealership_id) 
); 
+0

對數據庫鏈接的約束? – 2014-09-13 18:10:06

+0

啊,我沒有注意到。你是對的,那不適用於一個鏈接。 – eaolson 2014-09-13 18:37:57