执行存储过程使用CallableStatement对象.

解决方案 »

  1.   

    怎么用啊?我是新手来的,能不能教教我。我用proceduredataset执行存储过程时,如果没有返回数据集的话,执行都是失败的;用Statement.java里的execute只能执行sql server上的存储过程,请问怎样才能执行oracle的存储过程啊?谢谢!
      

  2.   

    现在我会用callableStatement来执行简单的存储过程了,但如果存储过程是返回一个记录集的,特别是oralce的存储过程,我就不知道该怎样传参数调用这个存储过程了,请问如何调用有返回记录集的oracle的存储过程? 谢谢!
      

  3.   

    registerOutParameter(int parameterIndex, int sqlType)
      

  4.   

    非常感谢你回答我的问题。对于简单的输出参数,像整形、字符串型我都会,但我的存储过程有一个游标类型的参数,过程里将返回的数据集放进这个游标里,我想知道sqlType里是否有游标类型的,获得后如何读取?你能不能再帮我看看?谢谢!
      

  5.   

    我的存储过程如下:
    CREATE OR REPLACE PROCEDURE myproc(rc1 in out sa.globalpkg.RCT1)
    is   
    BEGIN    
      OPEN RC1 FOR  
        SELECT * 
          FROM sa.table1; 
    END;
    现在就算是要在java中调用这个存储过程,参数rc1该如何传?获得后如何处理?
      

  6.   

    好像没有你这种用法。Statement倒是有setCursorName的方法,不过对你没有用的。其实肯定有办法可以绕过去的,因为所有的sp中需要控制的流程肯定能在更高级java语言中实现。我猜想你的sp是"select for update"的,你可以不用sp,而是在你创建Statement的时候就把AutoCommit设置成false,使用for循环来代替cursor,最后在执行"commit"。如果你只是为了选取数据而写出这样的sp,只能说明你华而不实,要知道sql语句中最简单的是select,同时最难的也是select。
      

  7.   

    我只是举个返回数据集的例子而已,并不代表这就是我的存储过程。事实上我的存储过程在返回数据集之前会做些比较复杂的工作,之后才将所需的数据集返回。试问一条简单的select语句用得着做成存储过程来调用吗?就算是我华而不实,非要用存储过程来实现这么简单的select语句,我也是想知道怎么在Java中调用这类型的存储过程而已,难道我不应该知道吗,难道我非要到碰到这类问题时才临时抱佛脚?我暂时不知道怎么用callableStatement来调用这类存储过程,但我现在知道用jbuilder的procedureDataSet可以调用了。谢谢你了!
      

  8.   

    呵呵,做实验学习那当然很好!很高兴认识你![email protected]
      

  9.   

    不是做实验,是真的做工程的。我找到方法了:
    registerOutParameter(1, oracle.jdbc.driver.types.cursor);
      

  10.   

    http://developer.novell.com/ndk/doc/samplecode/jdbc_sample/oci7/RefCursorExample.java.html