我有一个名为的存储过程MY_STORED_PROC
. 它有一个整数输入参数和一个整数输出参数。
我已经尝试了各种DECLARE
s、BEGIN
s 和END
s 和call
s,并且我已经开始研究更改语句终止符 (??),但我终生无法让它在原始 SQL (LINQPad在我的情况下)。
这个答案给出了
DECLARE outParam NUMBER;
BEGIN
TP.MY_STORED_PROC(26431414, outParam);
END;
返回
错误 [42601] [IBM][DB2/SUN64] SQL0104N 在“ ”之后发现了意外的标记“DECLARE OUTPARAM NUMBER@ BEGIN”。预期的标记可能包括:“
<values>
”。
我也尝试过设置终结符/分隔符:
--#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@
两者都返回
错误 [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;
}
我怎样才能调用这个东西并在输出参数中获得有意义的结果,然后我将其填充到结果集中并回显到屏幕上?