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

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

步骤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代码(类文件)时,可以看到对象名称为“ emrsn \ com \ DBTEST”,而不是ALL_OBJECTS表中的“ DBTEST”,并且状态为INVALID。
当对象名称类似于emrsn \ DBTEST时,我什至无法重新编译数据库中的类文件(使用ALTER JAVA CLASS obj_name RESOLVE)。

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

ALTER JAVA CLASS 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;

07-24 09:45
查看更多