gpt4 book ai didi

java - 如何从 PLSQL 调用 java 方法(位于 java 包内)

转载 作者:行者123 更新时间:2023-11-30 03:57:48 31 4
gpt4 key购买 nike

需求是从plsql调用java方法,我可以通过loadjava命令来实现它。我遵循的步骤是:

第 1 步:创建 Java Class/jar 文件并将其放置在 Unix 机器上

第2步:将Java Class/jar加载到数据库中,我可以在ALL_OBJCETS表中看到一个新对象,其对象类型为JAVA CLASS

第3步:发布函数:使用java静态方法创建函数/proc

第 4 步:执行函数/过程。

它对我来说工作得很好,但是当 java 类在 java 包中定义时,我面临着挑战。例如:类文件是:

============================

package emrsn.com;
public class DBTEST {

public static String callMe(String input){
return input;
}
}

==========================

现在,当我在数据库中上传上述java代码(类文件)时,我可以看到对象名称是“emrsn\com\DBTEST”,而不是ALL_OBJECTS表中的“DBTEST”,并且状态为INVALID。当对象名称类似于 emrsn\DBTEST 时,我什至无法重新编译数据库中的类文件(使用 ALTER JAVA CLASS obj_name RESOLVE)。

请让他们知道,当用Java打包时,是否有任何其他特定方法可以在数据库中引用这种类型的java类文件。您能否让我知道在创建函数或重新编译此对象时如何使用这些 JAVA 类对象(当它是 emrsn/com/DBTEST 时)。如前所述,我无法重新编译它们以查看确切的错误。

更改 JAVA 类 com/emrsn/DBTEST RESOLVE

出现以下错误

Error report:
SQL Error: ORA-00922: missing or invalid option
00922. 00000 - "missing or invalid option"
*Cause:

如果我使用 ALTER JAVA CLASS DBTEST RESOLVE,它会说找不到对象。让我知道如何引用这些对象。

最佳答案

您需要使用双引号(和正斜杠)和正确的关键字,具体取决于您使用的是类还是源文件:

alter java source "emrsn/com/DBTEST" compile;
-- or
alter java class "emrsn/com/DBTEST" compile;
-- alternatively use resolve clause

要获取所有无效对象的全名,请使用

SELECT dbms_java.longname (object_name) FROM user_objects
WHERE object_type = 'JAVA CLASS' AND status = 'INVALID';

( http://docs.oracle.com/cd/B19306_01/java.102/b14187/appendixa.htm )

使用您的“callMe”

CREATE OR REPLACE FUNCTION f_call_me(p_input VARCHAR2) RETURN VARCHAR IS LANGUAGE JAVA name 'emrsn.com.DBTEST.callMe(java.lang.String) return java.lang.String';
/
sho err
select f_call_me('blah') from dual;

关于java - 如何从 PLSQL 调用 java 方法(位于 java 包内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22682110/

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