存储过程中一个问题~
CallableStatement cs=getSession().connection().prepareCall("{call yujing_all(?,?,?,?,?,?)}");
cs.setString(1, condition);
cs.setString(2, search);
cs.setInt(3,0);
cs.setInt(4,0);
cs.registerOutParameter(5, OracleTypes.CURSOR);
cs.registerOutParameter(6,OracleTypes.NUMBER);
cs.execute();
return cs.getInt(6);
cs.execute执行没有问题~ 数据库执行的时候看到也没问题,获得了一个数字的返回值~
但是有异常说
ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'YUJING_ALL' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
这个什么意思
------解决方案--------------------这都说了:
PLS-00306: 调用 'YUJING_ALL' 时参数个数或类型错误
你看看这个包里面的参数类型和你定义的参数类型是否一致,另外你定义的参数个数和包里面的参数个数是否一致
------解决方案--------------------create or replace procedure yujing_all( cr_yj out sys_refcursor,con out number ,userid in varchar,sKhxm in varchar2 default null,firstIndex in number,lastIndex in number)is
CallableStatement cs=getSession().connection().prepareCall("{call yujing_all(?,?,?,?,?,?)}");
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.registerOutParameter(2,OracleTypes.NUMBER);
cs.setString(3, condition);
cs.setString(4, search);
cs.setInt(5,0);
cs.setInt(6,0);
cs.execute();
return cs.getInt(1);
java中调用存储过程:参数个数和位置必须一一对应。
你存储过程中第一个参数类型是游标(输出类型),那么java中调用存储过程就应该是cs.registerOutParameter(1, OracleTypes.CURSOR);
依此类推