簡體   English   中英

DB2 存儲過程,輸出參數始終為 NULL

[英]DB2 stored proc with Out param always NULL

這是 IBM I 上的 DB2。

我使用 Run SQL 腳本來測試我的 SP。 在此處輸入圖像描述

我什至嘗試如下初始化 out 參數並得到相同的結果......

CALL SGDEDMGT.USPGETBLAHIDFROMBLAHNUM(
  BLAHNO => 'xx#########00000####',  
  /* IN  CHARACTER(20)    */
  BLAHID => '0'   /* OUT INTEGER          */
);

這是我回來的結果...

 [ 09/09/2022, 03:45:30 PM ]  Run All...   
  CALL SGDEDMGT.USPGETBLAHIDFROMBLAHNUM( BLAHNO =>                       
  'xx#########00000####',  BLAHID => '0'  )   
  Return Code = 0 
  Output Parameter #2 (BLAHID) = <NULL>   
  Statement ran successfully   (141 ms)

我什至用最簡單的格式嘗試了 CALL,如下所示,仍然收到相同的結果......

CALL SGDEDMGT.USPGETBLAHIDFROMBLAHNUM(
  'xx#########00000####',?);

我只是不明白為什么我要為 BLAHID 購買 null。

這是我的存儲過程。

CREATE PROCEDURE USPGETBLAHIDFROMBLAHNUM (
    IN BLAHNO CHAR(20),
    OUT BLAHID INTEGER 
    )   
    LANGUAGE SQL
P1 : BEGIN
    DECLARE TMPP INTEGER;
    SET TMPP = (
    SELECT BLAHID
        FROM SGDEDMGT.BLAHS
        WHERE "BlahNumber" = BLAHNO ) ;
    SET BLAHID = TMPP;   
END P1

順便說一句,如果有人想知道,我通過做一個簡單的 SELECT 來檢查我的理智,只是為了確保我過濾的測試數據實際上是一個可返回的值:)

在運行 SQL 腳本中,您只需傳遞參數標記, ? , 進入 output 參數的調用語句..

CALL SGDEDMGT.USPGETBLAHIDFROMBLAHNUM(
  BLAHNO => 'xx#########00000####',  
  /* IN  CHARACTER(20)    */
  BLAHID => ?   /* OUT INTEGER          */
);

--with positional parms
CALL SGDEDMGT.USPGETBLAHIDFROMBLAHNUM('xx#########00000####', ?);

我發現了我的問題。 沒有真正注意是我的錯。 在我的創建過程示例的第 9 行中,“SELECT BLAHID”(注意,它不是真正的列名,我為含糊而道歉),問題本身就是 BLAHID。 它應該是 BlahId,因為實際的列名超過 6 個字符,所以應該用雙引號括起來,如“BlahId”。 為什么 RUN SQL SCRIPT 工具或編譯后顯示有關列名 BLAHID 不存在的任何錯誤是一個嚴重的奇跡,這給了我准確的錯覺,因此,四處奔波追逐自己的尾巴。 感謝所有花時間幫助我解決問題的人。 非常感激!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM