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



要求是从plsql调用java方法,我能够通过loadjava命令实现它。我要遵循的步骤是:

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

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

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

步骤4:执行函数/进程

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

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

package emrsn.com;
public class DBTEST {
    public static String callMe(String input){
        return input;
    }
}

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

现在,当我在数据库中上传上述java代码(类文件)时,我可以看到对象名称是"emrsncomDBTEST",而不是ALL_OBJECTS表中的"DBTEST",状态为无效。我甚至不能在数据库中重新编译类文件(使用ALTER JAVA class obj_name RESOLVE),当对象名称像emrsnDBTEST。

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

修改JAVA CLASS/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;

最新更新