JDBC执行存储过程的标准语法有两种形式:
1:{call procedureName para1, para2,...}
2:{?=call procedureName para1, para2,...}其中参数是可选的。如果存储过程不取任何参数,则调用格式为:
{call procedureName}如果存储过程有返回值,则应该使用形式2。存储过程中的任何参数都可以使用?代替。如果存储过程会改变参数值,则在调用存储过程的执行语句前,应当先注册输出参数,如下所示
CallableStatement cstmt = conn.prepareCall("{call findName}");
cstmt.registerOutParameter(1, Types.VARCHAR);
cstmt.execute();
System.out.println("the name is " + cstmt.getString(1));说明:到现在为止我还没有真正用过存储过程,并不知道是否会成功,自己试一下。我认为存储过程有一个很大的缺点,如果客户的数据库变了,几乎所有存储过程语句要重写。

解决方案 »

  1.   

    在绑定参数的时候,有什么讲究啊, 
     比如说我返回的结果值该如何绑定,等, 返回值如何绑定, 如在参数中既有in 也有out 的该如何绑定 ?谢谢
      

  2.   

    call=conn.prepareCall("{ call hqo_test(?,?) }");
                call.setString(1,"strTableName");
                call.registerOutParameter(2,OracleTypes.CURSOR);// 注册out参数的SQL数据类型
                call.execute();
                rs=(ResultSet)call.getObject(2);// 取得得数据结果集合//hqo_test存储过程名,两个参数,第一个为输入参数即in类型为string
    //第二个为输出参数,即out,是一个结果集.