我想为Sybase创建一个触发器,但它显示错误。
我想要做的是,当在[student]
表上执行删除操作时,检查[account]上是否有与学生相关的记录,如果是,则引发异常。
Sybase似乎缺乏支持。他们的官员似乎没有人去参观。
*CREATE TRIGGER AccountChecker
BEFORE DELETE ON student
REFERENCING OLD AS old_student
FOR EACH ROW
BEGIN
DECLARE @acc CHAR(4);
DECLARE @acc_not_null EXCEPTION FOR SQLSTATE '99999';
SELECT @acc=account.account_number FROM account
WHERE account.student_id = old_student.student_id;
IF @acc IS NOT NULL
BEGIN
SIGNAL acc_not_null
END
END*
答案 0 :(得分:3)
Sybase通过sp_primarykey
和sp_foreignkey
等过程以及声明性SQL约束支持外键和主键。你想要做的就是来自[学生]的[帐户]的外键应该做什么。
“Sybase SQL用户指南”(Adaptive Server 15,如果重要)说明了“删除受限”触发器(具有稍微不同的缩进):
create trigger deltitle
on titles
for delete
as
if (select count(*)
from deleted, salesdetail
where salesdetail.title_id =
deleted.title_id) > 0
begin
rollback transaction
print "You cannot delete a title with sales."
end
我不相信回滚是个好主意;一个例外可能更好。
您尝试使用的符号与SQL标准相比,更接近于Sybase支持的记录。
答案 1 :(得分:1)
Sybase不支持外键吗?