2011-09-30 39 views
0

我有一個Firebird StoredProc在插入之前和更新之前從觸發器運行並返回3個值。這3個值直接在同一個表中更新3個字段Firebird SQL:StoredProc返回null而不是分配的值

如果檢查結果爲真,我在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個字段但NULL!請指教

感謝

回答

1

由於您沒有足夠的發佈存儲過程的,這是很難說,但它看起來像你混不推薦選擇和可執行程序。也就是說,如果您通過EXECUTE PROCEDURE致電SP,則不應該有SUSPEND,如果有,請通過SELECT ... FROM SP致電。在最近的版本中,FireBird在這方面更加嚴格,雖然我認爲如果您使用「錯誤的調用機制」,它不會引發異常...

無論如何,如果您在可選SP中調用EXIT,那麼它會將SQLCODE設置爲100記錄流結束),IOW它不設置輸出值。所以我的建議是你「清理」你的SP,或者讓它可選(在你想要返回值的地方有SUSPEND,並通過SELECT聲明調用它)或使其可執行(擺脫SUSPEND語句並稱之爲通過EXECUTE)。