我有一個名爲MY_STORED_PROC
的存儲過程。它有一個整數輸入參數和一個整數輸出參數。如何在DB2中使用原始SQL調用存儲過程(LINQPad)
我試過的DECLARE
S,BEGIN
S和END
S和call
一切都方式,我已經開始考慮改變語句結束(??),我不能爲我的生命得到它在原始SQL(LINQPad在我的情況)工作。
DECLARE outParam NUMBER;
BEGIN
TP.MY_STORED_PROC(26431414, outParam);
END;
返回
ERROR [42601] [IBM] [DB2/SUN64] SQL0104N意外的標記 「DECLARE OUTPARAM NUMBER @ BEGIN」 之後發現「 」。預期的令牌可能包括:「
<values>
」。
我自己也嘗試設置終止/分隔符:
--#SET DELIMITER @
DECLARE outParam [email protected]
BEGIN
TP.MY_STORED_PROC(26431414, outParam);
[email protected]
--#SET TERMINATOR @
DECLARE outParam [email protected]
BEGIN
TP.MY_STORED_PROC(26431414, outParam);
[email protected]
都返回
ERROR [42601] [IBM] [DB2/SUN64] SQL0104N異常標記「DECLARE OUTPARAM NUMBER @ BEGIN「在」 「後找到。預期的令牌可能包括:「
<values>
」。
call
給出了同樣的結果。
通過OdbcCommand
調用它正常工作與call
:
var input = 789;
var sql = "call TP.MY_STORED_PROC (?, ?);";
using (var tx = new TransactionScope(TransactionScopeOption.Suppress))
using (var connection = new OdbcConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString))
using (var command = new OdbcCommand(sql, connection))
{
command.Parameters.Add("@input_param", OdbcType.Int, 32).Value = input;
command.Parameters.Add("@output_param", OdbcType.Int, 32).Direction = System.Data.ParameterDirection.Output;
connection.Open();
command.ExecuteNonQuery();
object output = command.Parameters["@output_param"].Value;
if (output is DBNull)
return null;
int output = Convert.ToInt32(output);
return output;
}
我怎麼能說這件事情,並在輸出參數,然後我的東西,在一個結果集,並回顯到屏幕上得到有意義的結果?
感謝您的輸入。不完全是我所追求的。我的問題是更多的「我將如何在SQL腳本中運行此存儲過程'get_dbsize_info(?,?,?,-1)',類似於我可以運行'ALTER TABLE TESTUSER.EMPLOYEE ADD NEW_COL VARCHAR(25)' ?」認爲數據庫升級腳本(通過RoundhousE或類似的)。 – sennett 2013-05-07 22:59:41
我不熟悉Roundhouse如何執行SQL語句 - 即它是直接連接到數據庫來執行語句,還是隻是使用每個DBMS的命令行實用程序執行腳本?如果是後者,則將'get_dbsize_info(?,?,?, - 1);'放入一個文件(比如''x.sql'')中,並用DB2 CLP:'db2 -tvf x.sql'執行。 – 2013-05-08 17:11:43
感謝您的持續關注。我想直接對數據庫執行這些腳本。 – sennett 2013-05-10 05:07:56