如何并行执行oracle java存储过程
我有这样一个问题:
select samplePackage.prepareMessage(t.message) as text
from
sampleSchema.sampleTable t;
sampleTable数据量大(行数30M) prepareMessage是一个java存储过程
private static String prepareMessage(String message) {
//do some things...
return preparedMessage;
}
我正在尝试并行执行这个查询。我该怎么做
谢谢
# 1 楼答案
你为什么要同时做呢?你打算如何处理结果
我认为并行运行它的唯一方法是在一个线程中执行它,然后数据库服务器将返回
ResultSet
。这个ResultSet
可以是将检索部分数据库响应的线程的参数(例如,每个线程将读取1M行)# 2 楼答案
我自己从来没有用Java函数尝试过。但方法应如下所示:
使用并行提示运行查询:
为了成功地并行执行SELECT,Oracle需要知道Java函数对此是安全的。因此,您必须将其声明为PARALLEL_ENABLE或提供RESTRICT_引用
然后,查询变成:
该函数还有其他限制,例如,它可能不执行DML语句。否则,并行执行是不可能的
正如我所说:我还没有用Java尝试过。但这就是方向
更新:我已将代码从使用包更改为使用函数。应该像这样简单
# 3 楼答案
使用Oracle的一个预打包API DBMS_作业包,将多个作业提交到作业队列,然后并行运行它们