如何使用原始SQL(LINQPad)在DB2中调用存储过程

时间:2013-05-06 22:41:27

标签: stored-procedures db2 output-parameter

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

我已经尝试了各种DECLAREBEGINEND以及call s,我开始研究更改语句终止符(??),我不能让我的生活在原始SQL中工作(在我的情况下是LINQPad)。

This answer给出了

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;。

我也尝试过设置终结符/分隔符:

--#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;
}

如何在输出参数中调用此事并获得有意义的结果,然后将其填入结果集并回显到屏幕?

1 个答案:

答案 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