【发布时间】: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