Setelah menghabiskan lebih dari satu hari untuk menyelidiki ini, saya diarahkan ke jawabannya hanya 10 menit setelah memposting pertanyaan saya. Khas!
Jawabannya ditemukan di sini - https://community.Oracle.com/thread/659625 - dan yang diperlukan hanyalah membungkus kode panggilan dalam sebuah transaksi. Kode kerja terlihat seperti ini:
using (var connection = new OracleConnection(connstring))
{
connection.Open();
using (var command = connection.CreateCommand())
{
// Start a local transaction
using (var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted))
{
// Assign transaction object for a pending local transaction
command.Transaction = transaction;
command.CommandText = "FNC_AXA_APPTS";
command.CommandType = CommandType.StoredProcedure;
OracleParameter retVal = new OracleParameter("PRS", OracleDbType.RefCursor);
retVal.Direction = ParameterDirection.ReturnValue;
command.Parameters.Add(retVal);
command.Parameters.Add(new OracleParameter("EG_PARAM", OracleDbType.Varchar2, 50)).Value = paramValue;
command.ExecuteNonQuery();
using (OracleDataReader reader = ((OracleRefCursor)command.Parameters["PRS"].Value).GetDataReader())
{
dt.Load(reader);
}
}
}
}
Pemahaman saya yang terbatas tentang solusinya adalah bahwa tanpa ini transaksi dilakukan di akhir SQL Server yang menyebabkan kursor yang dikembalikan gagal dalam iterasinya setelah diteruskan ke kode .NET. Jika ada yang memiliki penjelasan yang lebih baik, silakan tambahkan ke pertanyaan ini.