Oracle
 sql >> база данни >  >> RDS >> Oracle

Грешка при извличане на таблица за връщане от последователност от функция на Oracle в C#, където функцията използва dblink към SQL Server

След като прекарах повече от ден в разследване на това, бях насочен към отговора само 10 минути след публикуването на въпроса си. Типично!

Отговорът беше намерен тук - https://community.oracle.com/thread/659625 - и всичко, което се изисква, е да обвиете кода за повикване в транзакция. Работният код изглежда така:

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

Ограниченото ми разбиране за решението е, че без това транзакция се извършва в края на SQL Server, което води до неуспех на върнатия курсор в своята итерация, след като бъде предаден на .NET кода. Ако някой има по-добро обяснение, моля, добавете към този въпрос.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съществува в курсора, където условието е изпълнено

  2. Трябва ли процедурите и/или функциите на пакета DBMS_STANDARD да се използват в PL/SQL код?

  3. Единичен SQL SELECT Връща множество редове от един ред на таблица

  4. Oracle сравнява времеви печат с дата

  5. премахнете старите записи, групирани по три колони и подредени по дата