当前位置: 代码迷 >> Java Web开发 >> 存储过程中一个有关问题
  详细解决方案

存储过程中一个有关问题

热度:10319   发布时间:2013-02-25 21:19:46.0
存储过程中一个问题~
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);
依此类推
  相关解决方案