我使用的是Firebird 2.5 64bit版本。我有两个表Master(A)和Detail(B),我为B设置了级联更新和删除,所以如果我删除了master中的记录,那么详细信息中的任何相关记录都将被删除
我为表B设置了一个 After Delete 触发器,执行并将参数传递给存储过程
该存储过程具有此SQL:
select STATUS from A
where A.PK_id = :PK_id
INTO :var_status;
问题是我总是得NULL
变量var_status
虽然我在SQL编辑器中检查了它并得到1
这是正确的值,我也检查过(使用IBexpert调试器)传递的参数:PK_id
,它也是正确的!
为什么我在此变量中存储了错误的值。
答案 0 :(得分:4)
可能的问题是你正在使用AFTER DELETE
并且记录不再存在。这是行动的顺序:
AFTER DELETE
触发器被调用。请记住,触发器在事务中运行。因此,可能在运行相同的SELECT
时,您可以访问该值,因为您处于另一个事务中并且尚未提交原始事务。
实际上这并非如此微不足道。以下是一些解决您问题的方法:
cascade delete
并从A中的AFTER DELETE
触发器中处理B的删除。这样,所有内容都将位于相同的代码块中。