删除前的 Oracle 触发器

Posted

技术标签:

【中文标题】删除前的 Oracle 触发器【英文标题】:Oracle Trigger before delete 【发布时间】:2014-12-16 21:20:05 【问题描述】:

我正在尝试在删除用户之前添加触发器(从 users(id, name,...) 表中),因此我还可以删除用户的电话号码(从 user_phone(user_id, phone) 表中) :

CREATE TRIGGER users_before_delete 
BEFORE DELETE 
   ON users
   FOR EACH ROW
BEGIN
   DELETE FROM user_phones WHERE user_id = :old.id;
END;
/

但是我收到此错误:警告:触发器创建时出现编译错误。

我认为这与 :old.id 有关?

编辑: 即使有警告,它似乎也有效。当我删除用户时,它也会删除其电话号码。

谢谢。

【问题讨论】:

你能在 SQLPlus 中运行show errors 并在此处分享输出吗? users_phone(在顶部的文本中定义)不等于user_phones(在删除时定义的表)...它是哪个?应该delete FROM USERS_Phone where user_Id = :old.id;SELECT * from all_Tables where table_Name = 'USER_PHONES' 是否返回记录? SELECT * FROM ALL_TABLES WHERE TABLE_NAME = 'USERS_PHONE' 呢? 即使有警告,它似乎也能正常工作。当我删除用户时,它也会删除其电话号码。 附带说明:具有级联删除的引用约束将与此触发器具有相同的目的。 我同意艾伦的观点:加上级联删除可能会更快。 【参考方案1】:

在删除或插入或更新之前创建触发器时,您可以放置​​此代码并随意操作 我希望这对你有点帮助

BEGIN
if DELETING THEN ....
END IF;
END;

【讨论】:

进入 BEFORE DELETE 触发器此条件始终为真。没有任何理由使用它。 哦,对了,那是我的错。如果触发器在删除或插入或更新之前

以上是关于删除前的 Oracle 触发器的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 中的删除分区触发器

ORACLE 和触发器(插入、更新、删除)

使用触发器删除 Oracle 表中的行

删除oracle 11g用户删除不掉,报ORA-04098错误!

db2触发器after insert中怎么取得插入前的数据

插入或删除后的 Oracle 触发器