删除oracle触发器

时间:2014-09-13 15:12:34

标签: oracle triggers cascading-deletes

好的,所以我现在已经坚持了大约2个小时,我仍然找不到解决方案。

我有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 TBL_SALESPEOPLE@SITE1
  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';

但即使我在数据库中有记录,它仍会删除它

1 个答案:

答案 0 :(得分:0)

正如DrabJay在评论中所说,删除触发器中的新记录为NULL,因为它在删除后。

但是,坦率地说,你正在犯这个错误。这种事情应该用外键来完成,而不是在触发器中完成。

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