“索引中丢失 IN 或 OUT 参数”问题解决办法

 

问题描述

         最近有客户遇到存储过程做数据集的报表发布后报错:产生数据工厂: com.runqian.report4.dataset.ProcDataSetFactory 失败错误来源:: 索引中丢失 IN 或 OUT 参数:: 1 错误来源:索引中丢失 IN 或 OUT 参数:: 1

问题分析

         出现这个问题的原因可以有如下几个:

1、存储过程本身就不正确

2、数据集输出参数位置不正确

3、数据库驱动有问题

4、reportConfig.xml 文件中数据库类型不正确

排查步骤

         遇到该问题,可以按照如下步骤排查:

一、让客户在数据库端执行存储过程,若不能正常执行,则说明是问题 1 引起;

二、查看报表存储过程数据集输出参数位置,需保证“输出参数”位置在第一位

三、若在设计器中可以正常预览,但在自己的应用中报错,需将报表设计器下的数据库驱动拷贝到自身应用中,并将原来的驱动删除。该驱动位置在 ${设计器安装目录}\jdbc 下:如 D:\Program Files\reportHome\jdbc。

四、情况同三,若更换驱动后仍未解决就需要检查应用中的 reportConfig.xml 文件,查看其中的数据源配置处数据库类型是否有误。如有的客户这样配置:

    <config>

    <name>dataSource</name>

     <value>itacms,itacms,1,iso-8859-1,GBK,0</value>

       </config>

         这显然是不正确的,所以需要将第二个 itacms 修改为 oracle。

基本上通过如上排查方法即可解决该问题。