Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kesalahan mengambil tabel pengembalian urutan dari fungsi Oracle di C # di mana fungsi menggunakan dblink ke SQL Server

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. System.Data.OracleClient.OracleException:ORA-01036:nama/nomor variabel ilegal

  2. Bagaimana cara membuat Oracle membuat pernyataan tabel di SQL*Plus

  3. Nonaktifkan pemicu dan aktifkan kembali pemicu tetapi hindari perubahan tabel untuk sementara

  4. SQL IN Klausul 1000 batas item

  5. Menemukan tanggal di antara dua tanggal (Praktik terbaik)