というストアド プロシージャがありますMY_STORED_PROC
。これには、整数の入力パラメーターと整数の出力パラメーターがあります。
私はあらゆる種類DECLARE
の 、 、、BEGIN
およびを試しましたが、ステートメントターミネータ (??) の変更を検討し始めましたが、生の SQL (LINQPad私の場合)。END
call
この答えは
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;
}
このことを呼び出して、出力パラメーターで意味のある結果を取得し、それを結果セットに詰め込み、画面にエコーするにはどうすればよいですか?