日期:2014-05-20  浏览次数:20705 次

请教调用Oracle存储过程的问题,谢谢
有Oracle存储过程如下
create or replace procedure proc_test(p_str varchar2) is
begin
  null;
end;
/

有java程序如下
import java.sql.*;
import java.util.*;
import oracle.jdbc.driver.*;
import oracle.sql.*;

public class test
{
public static void main(String args[]) throws Exception
{
String outstr ="";
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
  Connection con = DriverManager.getConnection("jdbc:oracle:oci8:@local","user", "pass");
  OracleCallableStatement cstmt = (OracleCallableStatement) con.prepareCall("begin proc_test(?); end;");
long s = System.currentTimeMillis();

//我希望每次客户端(WEB页面)传入参数给这个java程序总是从这一行里开始执行,
//也就是prepareCall存储过程一次,调用存储过程多次,调用次数会很多
cstmt.setString(1,"客户端传入的参数值");
cstmt.execute();

  long e = System.currentTimeMillis();
System.out.println(e - s);
}
}


------解决方案--------------------
不行,每次都应该调用prepareCall,因为Web下是多线程的,不能随意共享。

此外,如果你是从性能角度考虑,也完全没必要,因为Oracle会处理这种情况下的预编译工作,会很聪明的使用缓存。
我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html