gpt4 book ai didi

java - 通过 java 和 sql plus 使用存储过程

转载 作者:行者123 更新时间:2023-12-02 09:13:30 24 4
gpt4 key购买 nike

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

我想创建第二个进程来重现 java 应用程序的相同操作,但在 shell 中。查看java代码,我发现该应用程序使用sql过程。

这个问题在java处理中只需要几秒钟,但在sql中则需要15或30分钟。

在我看来,在java中,该过程在 block 中执行一次,但在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 行,因此平均执行速度为 2 秒 15 行...还有文件日志中的写入……所有这些都会减慢治疗速度。

有没有办法对所有行执行一次该过程?有什么办法可以加快程序的执行速度吗?

最佳答案

使用 PL/SQL block 而不是 SQL*Plus 命令。 SQL*Plus 命令一次发送一个,可能会产生大量开销,而 PL/SQL block 将作为单个命令发送。

更改脚本:

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;
/

关于java - 通过 java 和 sql plus 使用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59203081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com