如何从PLSQL调用java方法(在java包中)

如何从PLSQL调用java方法(在java包中),java,plsql,Java,Plsql,需求是从plsql调用java方法,我可以通过loadjava命令来实现。我所采取的步骤如下: 步骤1:创建Java类/jar文件并将其放在unix框中 步骤2:将Java类/jar加载到数据库中,我可以在ALL_OBJCETS表中看到一个对象类型为Java类的新对象 步骤3:发布函数:使用java静态方法创建函数/proc 步骤4:执行函数/proc 这对我来说很好,但是当java类在java包中定义时,我在这里面临的挑战。例如: 类文件是: =========================

需求是从plsql调用java方法,我可以通过loadjava命令来实现。我所采取的步骤如下:

步骤1:创建Java类/jar文件并将其放在unix框中

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

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

步骤4:执行函数/proc

这对我来说很好,但是当java类在java包中定义时,我在这里面临的挑战。例如: 类文件是:

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

package emrsn.com;
public class DBTEST {

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

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

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

alterJava类com/emrsn/DBTEST解析

低于误差

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

如果我使用的是ALTERJava类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';
()

使用你的“呼叫我”


在创建函数时,是否需要使用以下代码:==================================创建或替换函数DBTEST_FUNC(VARCHAR2中的P_)返回VARCHAR2作为语言JAVA名称'emrsn/com/DBTEST.callMe(JAVA.lang.String)返回JAVA.lang.String';如果我正在执行此操作,则其给出错误atr运行时:===============================*原因:试图在Java类中执行不存在的方法。或者这里我也需要使用双引号。感谢您的及时回复。是的,如果没有包装函数或过程,您就不能使用java存储过程。这些可以是全局的(就像我的例子中的)或基于包的。是的,我同意。但是被打包的java方法卡住了。我需要如何在带有斜杠的DB函数中使用它们!!哦,我滚动了你的评论,得到了解决方案。很抱歉
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;