2011-01-12 44 views
1
public class HelloWorld{ 

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

    } 
} 

Oracle 10g和我經由斷言故障極光(ORA-29516)在上loadjava

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); 

,但它給了我提到的錯誤。

回答

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)'; 
3

我不是以任何方式的甲骨文專家,但我最近打這個問題,所以我只是想發表評論。出於某種原因,我不能留下評論,所以這是我的答案。

評論: 當我得到Ora-29516錯誤時,它帶有一個原因描述。有沒有更多的錯誤,當你得到它?

答: 如果您的極光斷言錯誤自帶的理由「未捕獲的異常系統錯誤:爪哇/郎/ UnsupportedClassVersionError」 =>

我得到這個錯誤時,Java版本我用來編譯類文件與Oracle中的Java版本(11g中的1.5.0)不同。爲了確保你完美匹配,讓Oracle爲你編譯這個類。您將獲得兩個好處:1)您將確定Java版本完全匹配。 2)您將源代碼加載爲數據庫「JAVA SOURCE」對象以備將來參考。爲了安全起見,您可能想鎖定它。

loadjava -user斯科特/老虎-resolve HelloWorld.java

通過使用源文件與決心選項,甲骨文將創建源對象和編譯類對象的代碼。如果省略-resolve選項,Oracle將創建源對象並僅在調用它時進行編譯。我認爲這可能有很好的靈活性選擇,但性能缺陷。