sql >> Databasteknik >  >> RDS >> Oracle

Fel vid hämtning ur sekvens som returnerar tabell från Oracle-funktion i C# där funktionen använder dblink till SQL Server

Efter att ha ägnat över en dag åt att undersöka detta blev jag hänvisad till svaret bara 10 minuter efter att jag postat min fråga. Typiskt!

Svaret hittades här - https://community.oracle.com/thread/659625 - och allt som krävs är att slå in anropskoden i en transaktion. Arbetskoden ser ut så här:

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

Min begränsade förståelse för lösningen är att utan denna begås en transaktion i SQL Server-änden vilket gör att den returnerade markören misslyckas i sin iteration när den väl har skickats till .NET-koden. Om någon har en bättre förklaring, lägg till den här frågan.



  1. Skillnad mellan flytande och decimal datatyp

  2. PDO bind_param är odefinierad metod

  3. Sammanfoga tabeller från olika databaser

  4. Hur lagrar man datum-tid i UTC i en databas med EclipseLink och Joda-Time?