http://www.fanqiang.com/a4/b5/20010530/180801279.html

解决方案 »

  1.   

    1、先使用execute()执行该存储过程。
    2、使用getResultSet()取出结果集进行操作。
      

  2.   

    我的调用代码如下:
    CallableStatement cstmt = con.prepareCall( 
    "{?=call TestMuliResult(?,?)}"); //有问题,但我不知道该怎样写
    cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
    cstmt.setInt(1,java.sql.Types.TINYINT);
    cstmt.execute();//出错!
    楼上的,帮我改改。
      

  3.   

    首先肯定存储过程是否对,请解释type.refcursor从那里得来
      

  4.   

    你的存储过程可以编译过去吗?我仿照你的做了一个,但是总是Invalid!
      

  5.   

    你要取游标返回的结果集,就应该这样写。cstmt.registerOutParameter(1,OracleTypes.CURSOR);
      

  6.   

    type.refcursor
    的定义如下
    ----------------------------------
    create or replace package type as
        TYPE refcursor is REF CURSOR;
    end type;
    ===================================
    按照nicholaz提出的方法,调用成功
      不过取返回的cursor时用
       ResultSet Rs=(ResultSet)cstmt.getObject(ParamIndex);
       成功,但不知oracle提供的jdbc驱动里面有很多象oracleConnection
       oracleCallableStatement 的类有什么有,怎么用,在那可以找到相关的文档?      
      

  7.   

    open ... for string,默认是字符串,open o_Result1 for 'select * from tableName1';
    open o_Result2 for 'select * from tableName2';
      

  8.   

    谢谢楼上几位,现将代码给出如下,希望能和大家交流。
    //引用cursor type
    create or replace package type as
         TYPE Curtype IS REF CURSOR;
    end type;create or replace procedure TestMutiResult
    (  
       o_result out type.curtype  
    )is
    begin
      
       open o_result for select user_id from tablename; 
     
    end TestMutiResult;import sun.io.*;
    import oracle.sql.*;
    import oracle.jdbc.*;
    import java.sql.*;
    class DataResult_01{  public static void main (String args []) throws SQLException { String url ,user , pwd;
    url="jdbc:oracle:thin:@123.132.1.9:1521:database";
    user="user"; //login user
    pwd="pwd";   //login pwd try {
     
      Class.forName("oracle.jdbc.driver.OracleDriver");}
    catch (Exception e) { e.printStackTrace(); } try{
       Connection con =DriverManager.getConnection(url,user,pwd);
               CallableStatement cstmt = con.prepareCall("{call TestMutiResult(?)}");
               cstmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
               
               cstmt.execute();
               ResultSet Rs=(ResultSet)cstmt.getObject(1);          while(Rs.next()){
                  System.out.println(Rs.getString(1));
              }         
       
    }catch (Exception e) { e.printStackTrace(); }  }
    }
      

  9.   

    一般来说!在java里面调用数据库就如你所写那样,用到如下几个类就差不多了!Connection
    CallableStatement
    ResultSet