执行pl/sql查询时出现溢出错误

本文关键字:溢出 错误 查询 pl sql 执行 | 更新日期: 2023-09-27 18:10: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

执行pl/sql查询时出现溢出错误

选择的列值的精度超过了。net的十进制类型。解决此问题的最佳方法是将列值四舍五入到可管理的预览大小。通常我把它们四舍五入到小数点后2位,因为我不需要更多,你可以根据你的需要选择。

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

的例子:

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