断言失败Aurora(ORA-29516)在load 10上的Oracle 10g中

问题描述 投票:1回答:3
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
3个回答
3
投票

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

评论:当我收到Ora-29516错误时,它会附带一个理由描述。当你得到错误时,还有更多错误吗?

答案:如果您的Aurora Assertion错误附带“Uncaught exception System error:java / lang / UnsupportedClassVersionError”=>

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

loadjava -user scott / tiger -resolve HelloWorld.java

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


2
投票

您无法从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)';  

0
投票

发生此错误的原因是oracle和java编译器中不同java版本的不兼容性。 - > oracle版本: - TO在ORACLE中检查JAVA版本

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

遵循这一步骤:

// java的

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

而不是加载类Simple直接加载你的java,第1步:

 loadjava -user system/admin simple.java 

第2步:

然后>创建一个过程

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

STEP3:

 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;
© www.soinside.com 2019 - 2024. All rights reserved.