【问题标题】:Oracle Trigger before delete删除前的 Oracle 触发器
【发布时间】: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' 呢?
  • 即使有警告,它似乎也能正常工作。当我删除用户时,它也会删除其电话号码。
  • 附带说明:具有级联删除的引用约束将与此触发器具有相同的目的。
  • 我同意艾伦的观点:加上级联删除可能会更快。

标签: sql database oracle plsql


【解决方案1】:

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

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

【讨论】:

  • 进入 BEFORE DELETE 触发器此条件始终为真。没有任何理由使用它。
  • 哦,对了,那是我的错。如果触发器在删除或插入或更新之前
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
相关资源
最近更新 更多