gpt4 book ai didi

java - 如何并行执行oracle java存储过程

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:54:53 24 4
gpt4 key购买 nike

我有这样的查询:

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

我正在尝试并行执行此查询。我该怎么做?

谢谢。

最佳答案

我自己从未尝试过使用 Java 函数。但方法应该如下:

使用 PARALLEL 提示运行查询:

select /*+ PARALLEL(t) */ samplePackage.prepareMessage(t.message) as text 
from sampleSchema.sampleTable t;

要成功地并行执行 SELECT,Oracle 需要知道您的 Java 函数对此是安全的。因此,您必须将其声明为 PARALLEL_ENABLE 或提供 RESTRICT_REFERENCES。

CREATE OR REPLACE FUNCTION PREPARE_MESSAGE(message IN VARCHAR2) RETURN VARCHAR2 PARALLEL_ENABLE
AS LANGUAGE JAVA
NAME 'sampleSchema.samplePackage.prepareMessage(Java.lang.String) return Java.lang.String';

然后查询变为:

select /*+ PARALLEL(t) */ PREPARE_MESSAGE(t.message) as text 
from sampleSchema.sampleTable t;

还有更多的限制适用于该功能,例如它可能不执行 DML 语句。否则,并行执行是不可能的。

正如我所说:我还没有用 Java 尝试过。但这是前进的方向。

更新:我已将代码从使用包更改为使用函数。像这样应该更简单。

关于java - 如何并行执行oracle java存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8516771/

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