2

というストアド プロシージャがありますMY_STORED_PROC。これには、整数の入力パラメーターと整数の出力パラメーターがあります。

私はあらゆる種類DECLAREの 、 、、BEGINおよびを試しましたが、ステートメントターミネータ (??) の変更を検討し始めましたが、生の SQL (LINQPad私の場合)。ENDcall

この答え

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 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 " " の後に予期しないトークン "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