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