gpt4 book ai didi

java - 使用 CLOB 和 VARCHAR2 参数从 PL/SQL 调用 Java 函数

转载 作者:行者123 更新时间:2023-11-30 03:38:33 25 4
gpt4 key购买 nike

我遇到了在 Oracle 11g 数据库中使用 java 类的静态方法(通过 PL/SQL 调用)的问题:

我有一个 java 类,其中包含如下所示的方法:

public class OuterClass
{
public static String WriteIt(String Input1, String Input2, String Input3)
{
return "Hello World!";
}
}

从 PL/SQL 调用,我想传递一个 CLOB 和两个 VARCHAR2 数据类型作为参数。

我在 PL/SQL 中的函数定义(当前)如下所示:

create or replace FUNCTION HelloWorldExample
(
p_Input1 CLOB,
p_Input2 VARCHAR2,
p_Input3 VARCHAR2
)
RETURN CLOB
AS LANGUAGE JAVA
NAME 'OuterClass.WriteIt(java.lang.String,java.lang.String,java.lang.String) return java.lang.String';

看起来我需要先将“clob”转换为字符串,但我该怎么做?

谢谢!

最佳答案

方法 1:在数据库级别进行转换

为了将 clob 转换为字符串,您可以使用 dbms_lob.substr 方法。

例如:

create table a1(a clob);
insert into a1 values(rpad('a',1000,'b'));
select dbms_lob.substr(a,500,1) from a1;

根据您的情况,您可以更改 HelloWorldExample,如下所示:

create or replace FUNCTION HelloWorldExample
(
p_Input1 VARCHAR2,
p_Input2 VARCHAR2,
p_Input3 VARCHAR2
)
RETURN CLOB
AS LANGUAGE JAVA
NAME 'OuterClass.WriteIt(java.lang.String,java.lang.String,java.lang.String)
return java.lang.String';

并且,在调用 HelloWorldExample 时,您可以将 clob 转换为字符串,如下所示:

declare
ccol clob;
outs varchar2(2000);
begin
select a into ccol from a1;
outs := HelloWorldExample(dbms_lob.substr(ccol,500,1),'somestr1','somestr2');
dbms_output.put_line(outs);
end;
/

方法 2:在应用程序级别进行转换

此外,您还可以使用 Java 的 Clob 类型:

create or replace FUNCTION HelloWorldExample
(
p_Input1 CLOB,
p_Input2 VARCHAR2,
p_Input3 VARCHAR2
)
RETURN CLOB
AS LANGUAGE JAVA
NAME 'OuterClass.WriteIt(java.sql.Clob,java.lang.String,java.lang.String)
return java.lang.String';

java程序需要更新如下:

public class OuterClass
{
public static String WriteIt(Clob Input1, String Input2, String Input3)
{
return input1.getSubString(1,500);
}
}

关于java - 使用 CLOB 和 VARCHAR2 参数从 PL/SQL 调用 Java 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27299784/

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