我在插入之前和更新之前从触发器运行Firebird StoredProc,并返回3个值。这3个值直接在同一个表中更新3个字段
如果检查结果为真,我在SP开始检查我想跳过那个SP所以我使用了“暂停”和“退出”,但是当我这样做时,我发现3个字段更新为空值。那是为什么?触发器:
CREATE OR ALTER trigger trig1 for table1
active before insert or update position 2
AS
begin
execute procedure my_proc1 new.f1, new.f2
RETURNING_VALUES new.f3, new.f4, new.f5;
end
StoredProc(非常大,我只放了第一行):
begin
if (COALESCE(Param1,0) = 1) then begin
output1 = 0;
output2 = 0;
output3 = 0;
exit;
end
即使我删除了IF块并保留了其他所有内容,我也没有在3个字段中获得零但是为了!!!请指教
由于
答案 0 :(得分:1)
由于您尚未发布足够的存储过程,因此很难说,但看起来您正在混合可选择的和可执行的过程,这是不推荐的。即如果您通过EXECUTE PROCEDURE
致电SP,则不应包含SUSPEND
,如果有,请通过SELECT ... FROM SP
进行调用。在最近的版本中FireBird在这方面更严格,虽然我认为如果你使用“错误的调用机制”它不会引发异常......
无论如何,如果你在可选SP中调用EXIT
,那么它将SQLCODE设置为100(记录流结束),IOW它不设置输出值。所以我的建议是你“清理”你的SP,要么让它可以选择(在你想要返回值的地方SUSPEND
并通过SELECT
语句调用它)或使其可执行(摆脱它)其中包含SUSPEND
个语句,并通过EXECUTE
调用。