我真的很喜歡SQuirreL SQL作爲SQL查詢工具,但我從來沒有能夠在我們的AS/400 DB2數據庫中調用存儲過程。我總是收到錯誤「設置或註冊的參數值數量與參數數量不匹配」。我仔細檢查了一些參數,沒有運氣。這是我試過的,它有一個IN和OUT一個程序的語法:如何使用SQuirreL SQL中的OUT參數調用DB2存儲過程?
呼叫SOMESPROC(12345,?)
我真的很喜歡SQuirreL SQL作爲SQL查詢工具,但我從來沒有能夠在我們的AS/400 DB2數據庫中調用存儲過程。我總是收到錯誤「設置或註冊的參數值數量與參數數量不匹配」。我仔細檢查了一些參數,沒有運氣。這是我試過的,它有一個IN和OUT一個程序的語法:如何使用SQuirreL SQL中的OUT參數調用DB2存儲過程?
呼叫SOMESPROC(12345,?)
我認爲,如果有一個在那麼調用應該是:
CALL SomeSProc(12345)
得到的結果也許嘗試:
SELECT * FROM SomeSProc(12345)
在松鼠你可以使用這樣的事情。您需要確保聲明變量的類型與存儲過程中out參數的類型相匹配。
BEGIN
DECLARE outParam INT;
STORED_PROC_NAME(outParam);
END
如果您還需要爲過程提供輸入,您可以執行此操作。
BEGIN
DECLARE outParam INT;
STORED_PROC_NAME('input', outParam);
END
您還需要將語句分隔符更改爲;
以外的內容。否則,它將打破陳述並嘗試單獨發送每件作品。在松鼠>會話>會話屬性> SQL
不適合我! – 2013-06-11 13:16:34
不適合我! 松鼠SQL:3.5.0 ERR消息: 錯誤:DB2 SQL錯誤:SQLCODE = -104,SQLSTATE = 42601,則sqlerrmc = NUMBER; DECLARE outParam; END-OF-STATEMENT,DRIVER = 3.53.95 SQLSTATE:42601 ErrorCode:-104 錯誤發生在: DECLARE outParam NUMBER – 2013-06-11 14:32:12
更改語句分隔符:「#」
BEGIN
DECLARE inOutParam varchar(200);
set inOutParam = 'a value';
STORED_PROC_NAME(outParam);
END;
#
在DBVisualizer中的專業版,與SQL指揮官菜單選項下的「工藝參數標記在SQL」啓用,它會允許「?」 param
call SOMESPROC(12345, ?);
這是一個經過測試的例子,它對帶有db2存儲過程的Squirrel 3.7起作用。訣竅是過渡存儲過程MY_PROC_TEST來調用真正的存儲過程PROC_TEST。在松鼠>會話>會話屬性> SQL
更改語句分隔符:@
DROP PROCEDURE MY_PROC_TEST()@
CREATE PROCEDURE MY_PROC_TEST()
RESULT SETS 1 -- out resultset (call product)
LANGUAGE SQL
BEGIN
DECLARE flag SMALLINT; -- out parameter
CALL MY_PROC('2015', flag);
END @
CALL MY_PROC_TEST()@
END @
然後,你可以這樣調用的sored過程:
CALL MY_PROC_TEST()@
似乎SQuirrel目前在AS/400 DB2上無法做到這一點。
使用開源「SQL工作臺/ J」(http://www.sql-workbench.net/)我是能夠調用過程:
wbcall SOMESPROC(12345, ?);
它有它自己的調用過程「wbcall」命令。使用 ?用於輸出參數。
注意:安裝SQL Workbench/J時,請務必從IBM下載正確的DB2驅動程序,並在SQL Workbench/J中添加驅動程序時添加許可證文件。
如果更改分隔符(如上所述),這將在Squirrel中工作。但是,要查看變量是什麼,您需要執行以下操作...
在我的示例中,我將把分隔符設置爲tildy(〜)。在「選擇」之前包括最後一個「結束」之後。代碼就從這裏開始......
begin
declare inoutParm numeric(2,0);
call spMyStoredProcedure(
1234567
, inoutParm
);
declare global temporary table session.myTempTbl
(MyResult char(1024))
with replace ;
insert into session.myTempTbl
(myResult)
values(inoutParm) ;
end
~
select myResult from session.myTempTbl
麥克風基利 AS400(DB2)的SQL開發
的問題是沒有得到結果。我想最後一次我嘗試了一個沒有OUT參數的sproc,結果就像直接查詢一樣返回。問題是處理OUT參數。 – 2011-02-21 16:10:36
是不是一個OUT參數的結果? – Leslie 2011-02-21 16:28:07
不,他們不是一回事。一個sproc可以通過三種方式產生輸出:通過結果集,OUT參數和第三種方法,我將調用返回值(不確定正確的名稱)。所以你可能有這樣的東西:?= GetListOfCheckedOutBooks(IN userID,OUT overdue)。這可能會首先返回某種標誌?,OUT參數中的布爾值指示用戶是否至少有一本逾期預訂,以及它們當前已檢出的所有書籍的結果集。 – 2011-02-23 18:22:14