2

我有一个名为的存储过程MY_STORED_PROC. 它有一个整数输入参数和一个整数输出参数。

我已经尝试了各种DECLAREs、BEGINs 和ENDs 和calls,并且我已经开始研究更改语句终止符 (??),但我终生无法让它在原始 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;
}

我怎样才能调用这个东西并在输出参数中获得有意义的结果,然后我将其填充到结果集中并回显到屏幕上?

4

1 回答 1

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
于 2013-05-07T06:50:49.810 回答