Ошибка подтверждения Аврора (ORA-29516) в Oracle 10g на loadjava - PullRequest
1 голос
/ 12 января 2011
public class HelloWorld{  

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

  }  
}

и я загружаю его в оракула через

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

, но выдает ошибкуЯ упоминал.

Ответы [ 3 ]

3 голосов
/ 10 марта 2011

Я ни в коем случае не эксперт Oracle, но недавно я столкнулся с этой проблемой, поэтому я просто хотел прокомментировать.По какой-то причине я не могу просто оставить комментарий, поэтому вот мой ответ.

Комментарий: Когда я получаю ошибку Ora-29516, она сопровождается описанием причины.Есть ли что-то еще к ошибке, когда вы ее получаете?

Ответ: Если ошибка Aurora Assertion связана с причиной "Uncaught exception System error: java / lang / UnsupportedClassVersionError" =>

Я получаюэта ошибка, когда версия Java, которую я использовал для компиляции файла класса, отличается от версии Java в Oracle (1.5.0 в 11g).Чтобы убедиться, что вы идеально подходите, позвольте Oracle скомпилировать класс для вас.Вы получите два преимущества: 1) Вы будете уверены, что версия Java точно соответствует.2) Исходный код будет загружен в качестве объекта базы данных «JAVA SOURCE» для дальнейшего использования.В целях безопасности вы можете заблокировать его.

loadjava -user scott / tiger -resolve HelloWorld.java

Используя исходный файл с параметром разрешения, Oracle создаст исходный кодобъект и скомпилировать код для объекта класса.Если вы пропустите опцию -resolve, Oracle создаст исходный объект и скомпилирует его только при его вызове.Я предполагаю, что у этого могут быть хорошие варианты гибкости, но недостатки производительности.

2 голосов
/ 12 января 2011

Вы не можете выводить консоль из Java-кода Oracle, так как он работает в базе данных. Возможно, если вы передадите переменную in / in, присвойте выходные данные вашего арифметического присваивания и выведите их в вызывающем блоке 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 голосов
/ 21 марта 2019

Эта ошибка возникает из-за несовместимости различных версий Java в Oracle и компиляторе Java. -> версия оракула: - ПРОВЕРИТЬ ВЕРСИЮ JAVA В ORACLE

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 

STEP2:

затем> создать одну процедуру

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...