通过Java和sql plus使用存储过程

我们管理一个Java应用程序,该应用程序允许通过设置框和验证来选择行。 我想创建第二个过程,以在外壳中重现Java应用程序的相同操作。在Java代码中查找,我发现该应用程序使用sql过程。 Java处理中的问题仅需几秒钟,而SQL则需要15或30分钟。 在我看来,该程序在Java中只在块中执行一次,而在Shell中执行一次 我构造了一个sql脚本,并逐行执行,因此处理时间根据要执行的行数而变化。

in java : 
       public static void insertTable(String Id,String[] List,String group)
                     throws SQLException {
              CallableStatement statement = null;
              Connection conn = null;
              try {
                     String procedure = "begin insertTable(?,?,?); end;";
                     conn = DBManager.getconnection();
                     statement = conn.prepareCall(procedure);
                     for (int i = 0; i < List.length; i++) {
                           statement.setString(1,Id);
                           statement.setString(2,List[i]);
                statement.setString(3,group);
                           statement.execute();
                     }

in script sql : 

set serveroutput on
whenever sqlerror exit SQL.SQLCODE
exec insertTable ('1575','TATA-11','FFF');
exec insertTable ('1574','TOTO-22','RRR');
exec insertTable ('1573','TITI-33','NNN');
exec insertTable ('1572','JOJO-44','UUU');
.....
exit 0;

要执行的行是可变的,一条可以有2000到10000行,因此平均执行速度为15行乘2秒... 还要写在文件日志中……所有这些都会减慢处理速度。

是否可以对所有行一次执行该过程?一种加快程序执行速度的方法?

谢谢

wuzhaohai000 回答:通过Java和sql plus使用存储过程

使用PL / SQL块代替SQL * Plus命令。 SQL * Plus命令一次发送一次,会产生很多开销,而PL / SQL块将作为单个命令发送。

从以下位置更改脚本:

exec insertTable ('1575','TATA-11','FFF');
exec insertTable ('1574','TOTO-22','RRR');
exec insertTable ('1573','TITI-33','NNN');
exec insertTable ('1572','JOJO-44','UUU');

收件人:

begin
    insertTable ('1575','FFF');
    insertTable ('1574','RRR');
    insertTable ('1573','NNN');
    insertTable ('1572','UUU');
end;
/
本文链接:https://www.f2er.com/2967038.html

大家都在问