删除前的 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 触发器的主要内容,如果未能解决你的问题,请参考以下文章