Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Błąd pobierania poza kolejnością zwracania tabeli z funkcji Oracle w C#, gdzie funkcja używa dblink do SQL Server

Po spędzeniu ponad dnia na badaniu tej odpowiedzi zostałem skierowany do odpowiedzi zaledwie 10 minut po opublikowaniu mojego pytania. Typowe!

Odpowiedź została znaleziona tutaj - https://community.oracle.com/thread/659625 - a wszystko, co jest wymagane, to zapakować kod wywołujący w transakcję. Działający kod wygląda tak:

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);
            }
        }
    }
}

Moje ograniczone zrozumienie rozwiązania polega na tym, że bez tego transakcja jest zatwierdzana na końcu SQL Server, co powoduje, że zwracany kursor nie powiedzie się w swojej iteracji po przekazaniu do kodu .NET. Jeśli ktoś ma lepsze wyjaśnienie, dodaj do tego pytania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL odpowiednik ORACLES rank()

  2. UTRZYMANIE LOB

  3. Konwertuj tabelę bez partycji na tabelę z partycjami za pomocą ONLINE w Oracle PL/SQL

  4. Porównanie dat zwraca nietypowy wynik — SQL Oracle

  5. Tworzenie aplikacji Java w Oracle JDeveloper, część 1