【问题标题】:Using Stored Procedures via java and sql plus通过 java 和 sql plus 使用存储过程
【发布时间】:2020-03-30 20:28:41
【问题描述】:

我们管理一个 java 应用程序,它允许通过设置框来选择行并进行验证。

我想创建第二个进程来重现 java 应用程序的相同操作,但在 shell 中。查看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 到 10 000 行,因此平均执行速度为 15 行乘以 2 秒 ... 还写在文件日志中……所有这些都会减慢治疗速度。

有没有办法对所有行执行一次该过程?一种加快程序执行速度的方法?

【问题讨论】:

  • 为什么不将数组传递给 pl/sql proc?

标签: java oracle stored-procedures sqlplus java-stored-procedures


【解决方案1】:

使用 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','TATA-11','FFF');
    insertTable ('1574','TOTO-22','RRR');
    insertTable ('1573','TITI-33','NNN');
    insertTable ('1572','JOJO-44','UUU');
end;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 2011-10-12
    • 2011-01-08
    • 2020-06-26
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多