Firebird SQL:StoredProc返回null而不是赋值

时间:2011-09-30 03:33:35

标签: sql stored-procedures firebird

我在插入之前和更新之前从触发器运行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个字段中获得零但是为了!!!请指教

由于

1 个答案:

答案 0 :(得分:1)

由于您尚未发布足够的存储过程,因此很难说,但看起来您正在混合可选择的和可执行的过程,这是不推荐的。即如果您通过EXECUTE PROCEDURE致电SP,则不应包含SUSPEND,如果有,请通过SELECT ... FROM SP进行调用。在最近的版本中FireBird在这方面更严格,虽然我认为如果你使用“错误的调用机制”它不会引发异常......

无论如何,如果你在可选SP中调用EXIT,那么它将SQLCODE设置为100(记录流结束),IOW它不设置输出值。所以我的建议是你“清理”你的SP,要么让它可以选择(在你想要返回值的地方SUSPEND并通过SELECT语句调用它)或使其可执行(摆脱它)其中包含SUSPEND个语句,并通过EXECUTE调用。