【问题标题】:Assertion failure Aurora (ORA-29516) in Oracle 10g on loadjavaOracle 10g on loadjava 中的断言失败 Aurora (ORA-29516)
【发布时间】:2011-06-07 19:46:42
【问题描述】:
public class HelloWorld{  

  public static void add(int a, int b){  
  System.out.println(a+b);  

  }  
}

然后我通过

将它加载到 oracle
loadjava -user system/admin Helloworld.class

这句话很好。

之后我写了这个程序:

create or replace  
PROCEDURE start_helloworld(a in number, b in number)  
AS language java  
name 'HelloWorld.add(int,int)';  

我希望能够在 PL/SQL 中调用该过程:

exec start_helloworld(1,1);  

但它给出了我提到的错误。

【问题讨论】:

    标签: java oracle plsql oracle10g


    【解决方案1】:

    您不能从 Oracle java 代码中进行控制台输出,因为它在数据库中运行。也许如果你传入和传入/传出变量,将算术赋值的输出分配给变量并在调用 PL/SQL 块中输出:

    var mynum NUMBER
    
    exec start_helloworld(1,1,:mynum);
    
    print mynum;
    

    您当然需要修改您的 java 和 PL/SQL 包装器以添加新参数:

    public static void add(int a, int b, int c){  
    c = a+b;  
    }
    

    create or replace  
    PROCEDURE start_helloworld(a in number, b in number, c in out number)  
    AS language java  
    name 'HelloWorld.add(int,int,int)';  
    

    【讨论】:

      【解决方案2】:

      无论如何,我都不是 Oracle 专家,但我最近遇到了这个问题,所以我只想发表评论。由于某种原因,我不能只发表评论,所以这是我的答案。

      评论: 当我收到 Ora-29516 错误时,它带有原因描述。当你得到它时,还有更多的错误吗?

      回答: 如果您的 Aurora 断言错误的原因是“未捕获的异常系统错误:java/lang/UnsupportedClassVersionError”=>

      当我用于编译类文件的 Java 版本与 Oracle 中的 Java 版本(11g 中的 1.5.0)不同时,我收到此错误。为确保您完美匹配,让 Oracle 为您编译该类。您将获得两个好处:1) 您将确保 Java 版本完全匹配。 2)您将源代码加载为数据库“JAVA SOURCE”对象以供将来参考。出于安全考虑,您可能需要将其锁定。

      loadjava -user scott/tiger -resolve HelloWorld.java

      通过使用带有解析选项的源文件,Oracle 将创建源对象并为类对象编译代码。如果省略 -resolve 选项,Oracle 将创建源对象并仅在调用它时编译它。我认为这可能有很好的灵活性选项,但性能缺陷。

      【讨论】:

        【解决方案3】:

        这个错误是由于oracle和java编译器中不同的java版本不兼容造成的。 -> 甲骨文版本: --在 ORACLE 中检查 JAVA 版本

        SELECT  dbms_java.get_ojvm_property(PROPSTRING=>'java.version') FROM dual;
        

        按照以下步骤操作:

        //java

        class simple{  
            public static String world(){  
             return("Hello Java");  
            }  
        } 
        

        加载类的安装简单直接加载你的java, 第 1 步:

         loadjava -user system/admin simple.java 
        

        第二步:

        然后>创建一个过程

        CREATE OR REPLACE PROCEDURE PROC_DEMO  as
        language java
        name 'simple.world()';
        /
        

        第三步:

         declare -- Parameter declaration
          RESULT VARCHAR2(2000);
        begin
          -- Please customize initialization
          -- Call the procedure/function
          RESULT := FUNC_DEMO;
          -- Print out the results
          dbms_output.put_line( 'RESULT = ' ||  SUBSTR( RESULT, 1, 255));
        end;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-01
          • 1970-01-01
          • 2011-05-27
          • 2017-08-07
          • 2012-08-01
          • 2015-09-01
          相关资源
          最近更新 更多