ADO.Netを使用して、Oracleデータベースのストアドプロシージャを呼び出しています。ストアドプロシージャには、NVARCHAR2であるoutパラメータがあります。ストアドプロシージャは次のとおりです。
CREATE OR replace PROCEDURE VALIDATE_Bin (
machine_dump_name IN NVARCHAR2,
lpn IN NVARCHAR2,
result OUT NUMBER,
message OUT NVARCHAR2)
IS
BEGIN
IF lpn LIKE 'A%' THEN
result := 1;
message := NULL;
ELSE
IF lpn IS NULL THEN
result := 0;
message := 'Failed Read';
ELSE
result := 0;
message := 'Invalid Barcode';
END IF;
END IF;
END;
そして、コマンドのパラメーターを入力するためのc#コードは次のとおりです。
command.Parameters.Add(new OracleParameter("machine_dumper_name",OracleType.NVarChar){Value = "My Dumper"});
command.Parameters.Add(new OracleParameter("lpn", OracleType.NVarChar) { Value ="XYZ1234"});
var resultParam = new OracleParameter("result", OracleType.Number) { Direction = ParameterDirection.Output};
command.Parameters.Add(resultParam);
var messageParam = new OracleParameter("message", OracleType.NVarChar) { Direction = ParameterDirection.Output};
command.Parameters.Add(messageParam);
command.ExecuteNonQuery();
このように実行すると、例外が発生します。
System.Exception:パラメータ'メッセージ':可変長データ型にサイズが設定されていません:文字列。
心配ありません。Oracleでは、「message」パラメータに文字列の長さが必要です。そこで、「メッセージ」パラメータにサイズパラメータを追加します。
var messageParam = new OracleParameter("message", OracleType.NVarChar, 255) { Direction = ParameterDirection.Output};
次に、それを実行すると、次のSystem.Data.OracleClient.OracleExceptionが発生します。
PLS-00306:「VALIDATE_Bin」の呼び出しで引数の数またはタイプが正しくありません
この手順を呼び出してメッセージを出すにはどうすればよいですか?この問題は文字列データ型に固有のものだと思います。これはバグですか?それとも私は何か間違ったことをしていますか?