存储过程有个out的参数,类型是table,怎样用java获取啊?
我用registerOutParameter(2, oracle.jdbc.OracleTypes.ARRAY,"table的名字");也不行。。
table是全局的也不行,放在package也不行求代码。。

解决方案 »

  1.   

    可以看看这文章
    http://blog.csdn.net/east271536394/article/details/5643371
    # /********************************* 
    #  *Create proc demo_proc  
    #    @inparam1 int , 
    #    @inparam2 varchar(20), 
    #    @inparam3 varchar(20), 
    #    @inparam4 varchar(50) 
    #    AS 
    #     insert into test values(@inparam1,@inparam2,@inparam3,@inparam4) 
    #  *存储过程 
    #  *表 
    #  * create table test( 
    #  *  [id] int, 
    #  *  [name] varchar(20), 
    #  *  age varchar(20), 
    #  *  address varchar(50) 
    #  *  ) 
    #  * 
    #  **********************************/  
    # import java.sql.*;  
    # /** 
    #  *author:East(张栋芳) 
    #  *date:2008-6-16 
    #  */  
    # public class StoreTest{  
    #     private static Connection con=null;  
    #     static String  url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=pubs";  
    #     public Connection getConn(){  
    #         System.out.println("aaaaaaaaaaaa");  
    #         try{  
    #           Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");  
    #           con=DriverManager.getConnection(url,"sa","");  
    #         }catch(ClassNotFoundException e){  
    #             e.printStackTrace();  
    #         }catch(SQLException se){  
    #             se.printStackTrace();  
    #         }  
    #         return con;  
    #     }  
    #     public void doStore() throws Exception{  
    #         String strSQL="{call demo_proc(?,?,?,?)}";  
    #         CallableStatement sqlStmt = getConn().prepareCall(strSQL);  
    #         sqlStmt.setInt(1,1);  
    #         sqlStmt.setString(2,"张栋芳");  
    #         sqlStmt.setString(3,"20");  
    #         sqlStmt.setString(4,"湖南永州");  
    #         int i=sqlStmt.executeUpdate();  
    #         System.out.println ("bbbbbbbbbbb");  
    #     }  
    #       
    #     public static void main(String [] args)throws Exception{  
    #         StoreTest test = new StoreTest();  
    #         test.doStore();   
    #     }  
    # } 
      

  2.   

    传出参数为table类型什么办??
      

  3.   


    ArrayDescriptor array2Tab = ArrayDescriptor.createDescriptor("你的嵌套table名",conn);
    ARRAY vArray = new ARRAY(array2Tab , conn, arr);//arr是你的java种的数组
      

  4.   

    哦,看成In参数了,out参数你registerOutParameter然后getArray不行吗,可以把嵌套表换成VARRAY试一下
      

  5.   

    晕死,它返回的是一个“Table”,也就是一个游标呀。// 注册输出参数应该是个游标
    cs.registerOutParameter(2, OracleTypes.CURSOR);// 接收,返回对象是个ResultSet
    ResultSet rs=(ResultSet)cs.getObject(params.length);
      

  6.   


    你在设计编写存储过程的时候,就没有想过返回table类型会造成后续的问题么?比如:现在就不知道怎么取数据了。。LZ还是设计的问题。。
    换其他的输出类型不行么。。返回查询结果。。
    String procedure = "{ call PageGetTemp(?, ?) }";
    CallableStatement cstmt;
    cstmt = con.prepareCall(procedure);
        cstmt.setInt(1, pageSize); 
        cstmt.setInt(2, pageNumber);
    ResultSet rs = cstmt.executeQuery();
    if(!Utils.isNull(rs)){ 
    while(rs.next()){
    String phone = rs.getString(1);
    list.add(phone);
    }
    }这样就能直接取了。。上述代码中phone也是列表数据。。