sql >> Databáze >  >> RDS >> Oracle

Chyba při načítání ze sekvence vracející tabulku z funkce Oracle v C#, kde funkce používá dblink na SQL Server

Poté, co jsem strávil více než den zkoumáním tohoto, byl jsem nasměrován na odpověď pouhých 10 minut po odeslání mé otázky. Typické!

Odpověď byla nalezena zde - https://community.oracle.com/thread/659625 - a vše, co je potřeba, je zabalit volací kód do transakce. Pracovní kód vypadá takto:

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

Mé omezené chápání řešení je, že bez toho je transakce potvrzena na konci SQL Serveru, což způsobí, že vrácený kurzor selže ve své iteraci, jakmile je předán kódu .NET. Pokud má někdo lepší vysvětlení, přidejte se k této otázce.



  1. Jak uniknout jednoduché uvozovce v řetězcovém literálu pomocí MySQL z Javy

  2. Vypočítejte (sum,max,avg) čárkami oddělený sloupec v mysql

  3. PLS-00103:Setkal se se symbolem „konec souboru“ v bloku jednoduché aktualizace

  4. Proč je SQLAlchemy count() mnohem pomalejší než nezpracovaný dotaz?