sql >> データベース >  >> RDS >> Oracle

関数がSQLServerへのdblinkを使用するC#のOracle関数からテーブルを返すシーケンスからのエラーフェッチ

    これを調査するのに1日以上費やした後、質問を投稿してからわずか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. OracleでORDERを使用してINSERT

    2. 奇妙で迷惑なエラー:未定義の関数mysql_query()の呼び出し

    3. Hibernate> CLOB> Oracle :(

    4. データベース内のエンティティの多くの同様の属性を表す方法は?