2011-02-16 40 views
5

我真的很喜歡SQuirreL SQL作爲SQL查詢工具,但我從來沒有能夠在我們的AS/400 DB2數據庫中調用存儲過程。我總是收到錯誤「設置或註冊的參數值數量與參數數量不匹配」。我仔細檢查了一些參數,沒有運氣。這是我試過的,它有一個IN和OUT一個程序的語法:如何使用SQuirreL SQL中的OUT參數調用DB2存儲過程?

呼叫SOMESPROC(12345,?)

回答

0

我認爲,如果有一個在那麼調用應該是:

CALL SomeSProc(12345) 

得到的結果也許嘗試:

SELECT * FROM SomeSProc(12345) 
+1

的問題是沒有得到結果。我想最後一次我嘗試了一個沒有OUT參數的sproc,結果就像直接查詢一樣返回。問題是處理OUT參數。 – 2011-02-21 16:10:36

+0

是不是一個OUT參數的結果? – Leslie 2011-02-21 16:28:07

+0

不,他們不是一回事。一個sproc可以通過三種方式產生輸出:通過結果集,OUT參數和第三種方法,我將調用返回值(不確定正確的名稱)。所以你可能有這樣的東西:?= GetListOfCheckedOutBooks(IN userID,OUT overdue)。這可能會首先返回某種標誌?,OUT參數中的布爾值指示用戶是否至少有一本逾期預訂,以及它們當前已檢出的所有書籍的結果集。 – 2011-02-23 18:22:14

3

在松鼠你可以使用這樣的事情。您需要確保聲明變量的類型與存儲過程中out參數的類型相匹配。

BEGIN 
    DECLARE outParam INT; 
    STORED_PROC_NAME(outParam); 
END 

如果您還需要爲過程提供輸入,您可以執行此操作。

BEGIN 
    DECLARE outParam INT; 
    STORED_PROC_NAME('input', outParam); 
END 

您還需要將語句分隔符更改爲;以外的內容。否則,它將打破陳述並嘗試單獨發送每件作品。在松鼠>會話>會話屬性> SQL

+1

不適合我! – 2013-06-11 13:16:34

+1

不適合我! 松鼠SQL:3.5.0 ERR消息: 錯誤:DB2 SQL錯誤:SQLCODE = -104,SQLSTATE = 42601,則sq​​lerrmc = NUM​​BER; DECLARE outParam; END-OF-STATEMENT,DRIVER = 3.53.95 SQLSTATE:42601 ErrorCode:-104 錯誤發生在: DECLARE outParam NUMBER – 2013-06-11 14:32:12

-2

更改語句分隔符:「#」

BEGIN 
    DECLARE inOutParam varchar(200); 
    set inOutParam = 'a value'; 
    STORED_PROC_NAME(outParam); 
END; 
# 
2

在DBVisualizer中的專業版,與SQL指揮官菜單選項下的「工藝參數標記在SQL」啓用,它會允許「?」 param

call SOMESPROC(12345, ?); 
0

這是一個經過測試的例子,它對帶有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()@

4

似乎SQuirrel目前在AS/400 DB2上無法做到這一點。

使用開源「SQL工作臺/ J」(http://www.sql-workbench.net/)我是能夠調用過程:

wbcall SOMESPROC(12345, ?); 

它有它自己的調用過程「wbcall」命令。使用 ?用於輸出參數。

注意:安裝SQL Workbench/J時,請務必從IBM下載正確的DB2驅動程序,並在SQL Workbench/J中添加驅動程序時添加許可證文件。

0

如果更改分隔符(如上所述),這將在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開發

相關問題