Как прочитать два cursor с процедуры?

  • Функция вызывает stored procedure.
  • stored procedure должна возвращать sys_refcursor.

Проблема: код читает только cursor o_limits и выдает ошибку:
Result set does not contain column with the name contracttypeid

public async Task < DepositSertificateTermsResponse > GetDepositSertificateTermsByProduct(int productId) {
    List < DepositSertificateTerms > deposits = new List < DepositSertificateTerms > ();
    List < ProductPercentagesAndEffectivePercentages > rates = new List < ProductPercentagesAndEffectivePercentages > ();

    using(var conn = new OracleConnection(_dbContext.GetOracleConnection().ConnectionString)) {
        using(var cmd = new OracleCommand(DbProcedures.GET_CD_PRODUCTS_LIMITS, conn)) {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("i_product", productId);
            cmd.Parameters.Add("o_limits", OracleDbType.Cursor, ParameterDirection.Output);
            cmd.Parameters.Add("o_rates", OracleDbType.Cursor, ParameterDirection.Output);

            await cmd.Connection.OpenAsync();
            var reader = await cmd.ExecuteReaderAsync();

            while (await reader.ReadAsync()) {
                DepositSertificateTerms deposit = new DepositSertificateTerms();
                deposit.ProductId = Convert.ToInt32(reader["productid"]);
                deposit.FullNameLocal = reader["fullnamelocal"].ToString();

                ProductPercentagesAndEffectivePercentages rate = new ProductPercentagesAndEffectivePercentages();
                rate.ContractTypeId = Convert.ToInt32(reader["contracttypeid"]);

                rates.Add(rate);
                deposits.Add(deposit);
            }
        }
    }

    return new DepositSertificateTermsResponse {
        Deposits = deposits,
        Rates = rates
    };
}

Ответы (0 шт):