【问题标题】:Getting overflow error when executing pl/sql query执行 pl/sql 查询时出现溢出错误
【发布时间】:2011-12-03 01:41:37
【问题描述】:

当我使用我的 C# 代码运行 pl/sql 查询[通过存储过程] 时,我收到一个错误: 我该如何解决?请指教。 注意:我在代码中为 providerSpecificTypes 传递 false。

 Error Message:
 System.Data.OracleClient.OracleException: OCI-22053: overflow error   
 at System.Data.Common.DbDataAdapter.FillErrorHandler(Exception e, DataTable dataTable, Object[] dataValues)    
 at System.Data.Common.DbDataAdapter.FillLoadDataRowChunk(SchemaMapping mapping, Int32 startRecord, Int32 maxRecords)    
 at System.Data.Common.DbDataAdapter.FillFromReader(Object data, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)    
 at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
 at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)    
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command,

代码如下:

DataSet ds = new DataSet(); 
        try 
        { 
            this.OpenDBConnection(); 
            this.dbAdapter.ReturnProviderSpecificTypes = providerSpecificTypes; 
            this.dbAdapter.Fill(ds); 
        } 
        catch 
        { 
            throw; 
        } 
        finally 
        { 
            CloseDBConnection(); 
            this.cmd.Parameters.Clear(); 
        }
            return ds;

查询:

SELECT client_id, TO_CHAR (business_dt, 'MM/DD/YYYY') AS business_dt 
       , mkt_type
       , mkt_name
       , product_name
       , period
       , TO_CHAR (start_dt, 'MM/DD/YYYY') AS start_dt
       , TO_CHAR (end_dt, 'MM/DD/YYYY') AS end_dt
       , duration
       , term
       , NULL AS strike_price
       , instrument_type
       , final_price
       , NULL AS product_price
       , units
       ,  NULL AS expiry_dt
       , mkt_close
       , cons_flag

【问题讨论】:

  • 什么数据库版本?什么是数据类型?确保将 Date 或 DateTime 变量传递到 TO_CHAR 函数中...
  • 请添加查询的其余部分。列的数据类型也很好
  • 数据库是 Oracle 10g。是的,我正在将 DateTime 变量传递给 to_char 函数。谢谢。
  • 自从我弄乱 10g 以来已经有一段时间了,但我知道 9i 对其 DBMS_OUTPUT.put_line() 函数的字符限制为(我认为)2000 个字符。我在积极编写 PL/SQL 时遇到了几次这种限制......

标签: c# oracle ado.net plsql


【解决方案1】:

一个选定的列值的精度超出了 .Net 的小数类型。解决此问题的最佳方法是将列值四舍五入到可管理的预置大小。通常我将它们四舍五入到小数点后 2 位,因为我不再需要了,您可以根据需要进行选择。

简而言之,更改您的查询,以便将所有具有较高精度数字的列四舍五入为您需要的小数位数:

例子:

Select ROUND(final_price, 2) From <your table>

应该解决你的问题。

【讨论】:

    猜你喜欢
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多