Oracle RefCursorのパラメータの問題
-
06-07-2019 - |
質問
ODP.NET(Microsoftのプロバイダーから移行中)を使用していますが、refcursorを返すストアドプロシージャにこだわっています。次のPL / SQLプロシージャがあります(より一般的にするために少し変更しました)。
PROCEDURE MyProc(parameter_no1 IN NUMBER, parameter_no2 IN NUMBER, RETCURSOR OUT ret_type) AS
BEGIN
OPEN RETCURSOR FOR
SELECT ad.logo logo
FROM tab_a a, tab_h h
WHERE a.id IS NOT NULL
AND a.h_id = h.id
AND a.no1 = parameter_no1
AND a.no2= parameter_no2;
END HanteraLogotype;
次に、次のC#コードを呼び出して呼び出します:
internal void RefCursorDataReader()
{
OracleCommand cmd = new OracleCommand("ABC$MYPACKAGE.MyProc", new OracleConnection(_constr));
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection.Open();
cmd.BindByName = true;
OracleParameter p = cmd.Parameters.Add("parameter_no1", OracleDbType.Decimal);
p.Value = 12345678;
p.Direction = ParameterDirection.Input;
p = cmd.Parameters.Add("parameter_no2", OracleDbType.Decimal);
p.Value = 123456;
p.Direction = ParameterDirection.Input;
p = cmd.Parameters.Add("RETCURSOR", OracleDbType.RefCursor);
p.Direction = ParameterDirection.Output;
OracleDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
System.Diagnostics.Debug.WriteLine(reader[0].GetType().ToString());
}
cmd.Connection.Close();
}
そしてこれを実行すると、この例外が発生し続けます:
ORA-03106:致命的な2タスク通信プロトコルエラー
パラメーター、そのタイプ、順序など、さまざまなバリエーションを試しましたが、何も役に立たないようです。例外をスローするのは reader.Read()
です。これについて本当に助かります!
追加: ret_typeは次のように定義されます。
TYPE ret_type IS REF CURSOR;
解決
それはバグのように見えます。 3106エラーは、決して発生しないはずの悪いエラーです。回避策があるはずです!!
ODP.NETの質問に最適な場所は、OTN ODP.NETフォーラムです。もし私があなたなら、あそこに投稿するでしょう:
http://forums.oracle.com/forums/forum .jspa?forumID = 146& start = 0
また、特定のフォーラムで" 3106"を検索します
他のヒント
11G ODP.NETにアップグレードしました
所属していません StackOverflow