2014-09-13 277 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