Java 如何从CallableStatement获取对象。(列索引无效)

Java 如何从CallableStatement获取对象。(列索引无效),java,plsql,Java,Plsql,我需要在java中执行过程PL sql 我的PL/SQL 类型REF\u游标为REF游标; 程序GET_报告(VARCHAR2中的P_账号参数, VARCHAR2中的P_循环切参数, VARCHAR2中的P_from_date_param, VARCHAR2中的P_to_date_param, VARCHAR2的参数要求的最后一个参数, VARCHAR2的P_工人id_参数, VARCHAR2中的P_requeset_type_参数, P_查询出参考光标, P_结果输出varchar2); 执

我需要在java中执行过程PL sql

我的PL/SQL

类型REF\u游标为REF游标;
程序GET_报告(VARCHAR2中的P_账号参数,
VARCHAR2中的P_循环切参数,
VARCHAR2中的P_from_date_param,
VARCHAR2中的P_to_date_param,
VARCHAR2的参数要求的最后一个参数,
VARCHAR2的P_工人id_参数,
VARCHAR2中的P_requeset_type_参数,
P_查询出参考光标,
P_结果输出varchar2);
执行时抛出错误
rs=(ResultSet)cstmt.getObject(8)
说明错误:列索引无效。 供应商代码:17003

我尝试了很多方法来获取索引1、2或8,但都没有成功

爪哇

CallableStatement cstmt=conn.prepareCall(sql);
int paramIdx=1;
//传入参数
如果(参数!=null)
对于(int i=0;i
这是我的PL/sql:

过程获取报告(VARCHAR2中的P_账户编号参数,
VARCHAR2中的P_循环切参数,
VARCHAR2中的P_from_date_param,
VARCHAR2中的P_to_date_param,
VARCHAR2的参数要求的最后一个参数,
VARCHAR2的P_工人id_参数,
VARCHAR2中的P_requeset_type_参数,
P_查询出参考光标,
P_结果输出varchar2)为
SQL_字符串VARCHAR2(5000);
开始
开始
--公开P_查询
SQL\u字符串:='选择一个帐户编号、一个周期切割、一个上次请求的日期、一个上次请求的日期,
案例a.app_状态
当“I”时,则“初始失败”
当“G”时,则“生成失败”
当“C”时,则“签入失败”
当“F”时,则“发送传真失败”
当“成功”时,则“成功”
ELSE a.app_状态
以应用程序状态结束
,c.电子邮件
,
案例c.电子邮件的状态
当“P”然后“等待”
当“Y”时,则“成功”
ELSE c.电子邮件发送状态
结束为电子邮件\u状态
,d.传真号码
, 
案例d.传真状态
当“P”然后“等待”
当“Y”时,则“成功”
当“D”时,则“传真失败”
当“F”时,则“发电机计费失败”
当“N”时,则“未找到帐单”
当“U”时,则“CD不可用”
ELSE d.fax_状态
以传真状态结束
从…起
ecm_计费_税务a左连接ecm_计费_要求b
在a.billing\u tax\u id=b.billing\u tax\u id上
左加入ecm\u计费\u税务\u电子邮件c
在b.billing\u tax\u email\u id=c.billing\u tax\u email\u id上
左连接ecm\u计费\u税务\u传真d
在b.billing\u tax\u fax\u id=d.billing\u tax\u fax\u id上
其中,a.账号不为空';
如果P_账户_编号_参数不为空,则
SQL|U字符串:=SQL|||和a.account|u number='''''| P|u account|u number|u param |'''';
如果结束;
如果P_cycle_cut_param不为空,则
SQL|u字符串:=SQL|||'和a.cycle|u cut=to|u date(“'P|u cycle|u cut|param','DD/MM/YYYY');
如果结束;
如果P_from_date_参数不为空,则
SQL|u字符串:=SQL||||'和trunc(最后一次请求的|u日期)>=to|u日期(“'| | P| u from|u日期参数“,“DD/MM/yyyyy”);
如果结束;
如果P_to_date_参数不为空,则
SQL_字符串:=SQL_字符串| |和trunc(a.last_requested_date)我看到“java.SQL.SQLException:Invalid column index”出现,主要原因有两个:

1) Setting column data using setXXXX(int coloumIndex) e.g. setInt(0) setString(0)
2) Getting column data using getXXX(int columnIndex) e.g. getInt(0) getString(0)
“java.sql.SQLException:Invalid column index”最常见的原因是错误地认为列索引以“0”开头,就像数组或字符串索引一样,但事实并非如此,而是列索引以“1”开头,因此无论何时尝试获取或设置列索引为“0”的列数据,都会得到“java.sql.SQLException:Invalid column index”


检查是否将
params[i]
分配给相应的索引。另外,检查您在
getObject()
方法中传递的
参数索引。它应该是8或9。

您的sql查询是什么?我的sql查询:{呼叫PCK_ECM_BILLING.GET_REPORT(?,,,,,,,,,,,,,?)};我尝试了cstmt.getObject(9);不是错误而是返回null//没有结果。