CallableStatementregisterOutParameter(int paramIndex, int sqlType, String typeName)

解决方案 »

  1.   

    我试过registerOutParameter,可是java存储过程返回的对象和oracle里的类型匹配好像不行,实在找不出方法
    谁能给个简单的例子看看,我会非常感激的
    拜托各位大虾
      

  2.   

    可以使oracle得存储过程返回游标(cursor)
      

  3.   

    例如:function get_clip_types return ref_cursor
    is  
    rc ref_cursor;
    begin
    open rc for select  a.fstlvl_type_id , b.sndlvl_type_id , 
    a.fstlvl_desc ,  b.sndlvl_desc
    from  epgd_fstlvl_types a,epgd_sndlvl_types b 
    where  a.fstlvl_type_id = b.fstlvl_type_id
    order   by a.fstlvl_order , b.sndlvl_order;
    return rc;
    exception
    when others then
    if rc%isopen then
    close rc;
    end if;
    return rc;
    end;
      

  4.   

    to TechnoFantasy(www.applevb.com):
        你的方法能够返回记录集,可是我现在的情况是要用java来写存储过程,不知道你用过这种方法没有,把java程序load进oracle以后,需要一个oracle的存储过程来调用java程序的方法,如果这个oracle的存储过程返回ref_cursor的话,我的java存储过程是用什么类型的返回值就不太清楚了另外:我想问问使用java程序写的存储过程与一般使用PL/SQL和用java/jdbc来访问数据库的性能比较,不知哪位赐教
      

  5.   

    Sorry,我只用过PL/SQL,但是我想既然Oracle支持Java,应该就有相对应的数据结构的。
      

  6.   

    to TechnoFantasy(www.applevb.com) 
         理论上应该如此,只是现在能找到的资料都没有涉及到这种问题,例子只是使用像String这样简单的数据类型来做,苦于没有这样的例子。没有办法
    了,只好慢慢学习吧,赫赫~~~~~~~~~~~~~~~
      

  7.   

    那能够使用java.sql.Type.STRUCT注册输出参数吗?
      

  8.   

    请问: hanty(大智若鱼) 
    sqlj是什么?是sql 支持的一种java语句吗?不懂?
    gz
      

  9.   

    你是说用java来写存储过程吗, 那看来时只能用 sqlj, 你可以看看 www.sqlj.org ,里面的文档说的挺清楚的
      

  10.   

    你用的是oracle8i吗?
    据我所知,oracle8i好像不能从Java存储过程中返回一个cursor(ResultSet).
      

  11.   

    Statement stmt2 = conn.createStatement();
    stmt2.execute("CREATE OR REPLACE FUNCTION func_squareInt " +
                  "(field1 IN INTEGER) RETURN INTEGER IS " +
                  "BEGIN return field1 * field1; " +
                  "END func_squareInt;");
    stmt2.close();// Native Oracle SQL is commented out here
    // sql = "BEGIN ? := func_squareInt(?); END;";// This is the correct syntax specified by JDBC
    sql = "{ ? = call func_squareInt(?)}";
    CallableStatement cstmt2 = conn.prepareCall(sql);cstmt2.registerOutParameter(1, Types.INTEGER);
    for (int i = 0; i < 5; i++) {
      cstmt2.setInt(2, i);
      cstmt2.execute();
      System.out.println(i + " " + cstmt2.getInt(1) +
                         " " + cstmt2.getInt(2));
    }
    cstmt2.close();
      

  12.   

    更多内容,请参考WebLogic文档jDrivers部分
      

  13.   

    oracle存储过程好象不可以返回结果集,你可以做个中间表,根据oracle存储过程的返回参数来确定是否从中间表里来得到结果集。
      

  14.   

    http://expert.csdn.net/Expert/topic/1179/1179422.xml?temp=.1523401
      

  15.   

    8i、9i中使用SQLJ可以实现存储过程。
      

  16.   

    我先结贴了,感谢各位参与讨论,等我看看SQLJ的东西能不能解决我的问题,以后再开贴和大家讨论