如果在存储过程中使用游标做为一个out类型,存储多个属性,在java程序中可以用:
CallableStatement proc=null;
proc=O.conn.prepareCall("{call scott.testa(?,?)}")//testa是一个存储过程,第二个变量是游标类型的out参数
proc.setString(1,sql1);
proc.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
proc.execute();
ResultSet rs = (ResultSet)proc.getObject(2);
//这样就可以获得多行数据=============================================
不用游标,下面程序为何出错?CallableStatement proc=null;
proc=O.conn.prepareCall("{call scott.testa(?,?)}")//testa是一个存储过程,第二个变量是游标类型的out参数
proc.setString(1,sql1);
proc.registerOutParameter(2,oracle.jdbc.OracleTypes.NUMBER);
proc.registerOutParameter(3,oracle.jdbc.OracleTypes.VARCHAR);
proc.registerOutParameter(4,oracle.jdbc.OracleTypes.VARCHAR);
proc.execute();
String s1=proc.getString(2);
String s2=proc.getString(3);
String s3=proc.getString(4);out.println(s1+s2+s3);========================================================================
如果不用游标,而将多个属性用多个out类型参数提取得到,有没有可能?如何实现多条数据(多行)输出?
CallableStatement proc=null;
proc=O.conn.prepareCall("{call scott.testa(?,?)}")//testa是一个存储过程,第二个变量是游标类型的out参数
proc.setString(1,sql1);
proc.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
proc.execute();
ResultSet rs = (ResultSet)proc.getObject(2);
//这样就可以获得多行数据=============================================
不用游标,下面程序为何出错?CallableStatement proc=null;
proc=O.conn.prepareCall("{call scott.testa(?,?)}")//testa是一个存储过程,第二个变量是游标类型的out参数
proc.setString(1,sql1);
proc.registerOutParameter(2,oracle.jdbc.OracleTypes.NUMBER);
proc.registerOutParameter(3,oracle.jdbc.OracleTypes.VARCHAR);
proc.registerOutParameter(4,oracle.jdbc.OracleTypes.VARCHAR);
proc.execute();
String s1=proc.getString(2);
String s2=proc.getString(3);
String s3=proc.getString(4);out.println(s1+s2+s3);========================================================================
如果不用游标,而将多个属性用多个out类型参数提取得到,有没有可能?如何实现多条数据(多行)输出?
proc.setString(1,sql1);
proc.registerOutParameter(2,oracle.jdbc.OracleTypes.NUMBER);
proc.registerOutParameter(3,oracle.jdbc.OracleTypes.VARCHAR);
proc.registerOutParameter(4,oracle.jdbc.OracleTypes.VARCHAR);
proc.execute();
String s1=proc.getString(2);
String s2=proc.getString(3);
String s3=proc.getString(4);里面只有两个?,你这里出来多少个参数???
相应的改存储过程,改输出参数,而且,按你这种参数方式(number,varchar2)只能输出一条记录。
你得用数组作为输出参数。
,dname out scott.dept.dname%type,loc out scott.dept.loc%type) AS
BEGIN select scott.dept.deptno into deptno from scott.dept where loc=loca;
select scott.dept.dname into dname from scott.dept where loc=loca;
select scott.dept.loc into loc from scott.dept where loc=loca;
END TESTA;
现在只是想试试多个参数能否多个用多个out参数,看来还是用游标吧。
游标可以,存储过程中直接 outparam out sys_refcursor定义在参数里面,取就用你上面得那个OracleTypes.CURSOR
然后getObject转为ResultSet,就可以取出来。