我有一个名为MY_STORED_PROC
的存储过程。它有一个整数输入参数和一个整数输出参数。
我已经尝试了各种DECLARE
,BEGIN
和END
以及call
s,我开始研究更改语句终止符(??),我不能让我的生活在原始SQL中工作(在我的情况下是LINQPad)。
This answer给出了
DECLARE outParam NUMBER;
BEGIN
TP.MY_STORED_PROC(26431414, outParam);
END;
返回
ERROR [42601] [IBM] [DB2 / SUN64] SQL0104N意外的令牌" DECLARE OUTPARAM NUMBER @ BEGIN"被发现" &#34 ;.预期的代币可能包括:"
<values>
&#34;。
我也尝试过设置终结符/分隔符:
--#SET DELIMITER @
DECLARE outParam NUMBER@
BEGIN
TP.MY_STORED_PROC(26431414, outParam);
END@
--#SET TERMINATOR @
DECLARE outParam NUMBER@
BEGIN
TP.MY_STORED_PROC(26431414, outParam);
END@
都返回
ERROR [42601] [IBM] [DB2 / SUN64] SQL0104N意外的令牌&#34; DECLARE OUTPARAM NUMBER @ BEGIN&#34;被发现&#34; &#34 ;.预期的代币可能包括:&#34;
<values>
&#34;。
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;
}
如何在输出参数中调用此事并获得有意义的结果,然后将其填入结果集并回显到屏幕?
答案 0 :(得分:1)
如果您只是尝试从DB2命令行处理器调用存储过程,则不需要做任何花哨的事情。只需对任何输出参数使用参数标记:
$ db2 "call tp.my_stored_proc(26431414, ?)"
DB2 CLP将只打印每个输出参数的名称/值。
例如,内置GET_DBSIZE_INFO
存储过程有3个输出参数。你这样称呼它:
$ db2 "call get_dbsize_info(?, ?, ?, -1)"
Value of output parameters
--------------------------
Parameter Name : SNAPSHOTTIMESTAMP
Parameter Value : 2013-05-06-23.49.14.581776
Parameter Name : DATABASESIZE
Parameter Value : 253607936
Parameter Name : DATABASECAPACITY
Parameter Value : 2179940352
Return Status = 0