次のコードを使用してSQL Developerから呼び出すと、完全に正常に機能するOracleのプロシージャがあります。
VARIABLE x REFCURSOR
exec MY_PROCEDURE('par1', 'par2', 'par3', 'par4' ,:x);
PRINT x;
.Net アプリから (ODP.NET を使用して) 呼び出そうとすると、次のエラーが発生します。
Oracle.DataAccess.Client.OracleException ORA-08103: object no longer exists
これは私がそれを呼び出すために使用するコードです:
OracleConnection con = new OracleConnection();
con.ConnectionString = dbConnectionString; //string with the connectio. It is fine because I can connect
OracleCommand cmd = new OracleCommand("MY_PROCEDURE", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
cmd.Parameters.Add(new OracleParameter("par1", OracleDbType.Varchar2)).Value = var1;
cmd.Parameters.Add(new OracleParameter("par2", OracleDbType.Varchar2)).Value = var2;
cmd.Parameters.Add(new OracleParameter("par3", OracleDbType.Varchar2)).Value = var3;
cmd.Parameters.Add(new OracleParameter("par4", OracleDbType.Varchar2)).Value = var4;
OracleParameter ref_cursor = new OracleParameter();
ref_cursor.OracleDbType = OracleDbType.RefCursor;
ref_cursor.Direction = ParameterDirection.Output;
cmd.Parameters.Add(ref_cursor);
con.Open();
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{ ... }
cmd.ExecuteReader コマンドは実際には「動作」し、アプリケーション例外がスローされますが、オブジェクトdr.read
をチェックすると、プロパティでエラーが表示されます。dr
hasRows
ORA-08103: object no longer exists
何が間違っている可能性がありますか?詳細の 1 つは、(カーソルを返す) ほぼ同じロジックに従い、正常に動作する同様の手順があることです。