11

誰でもこれについて私を助けてくれますか: Pl/SQL、Oracle RDBMS から 1 つの Java プログラムを呼び出したいのですが、以下は設定です

Windows 7 マシン、Java は C:\Program Files\Java\jdk1.7.0_02 にインストールされています

Java ファイルを保持するためのディレクトリを 1 つ作成しました。D:\Java には、hello.java ファイルが 1 つあります。

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

これは問題なくコンパイルされ、同じディレクトリに .class ファイルが生成されました。

PL/SQLを使用してこの関数を呼び出す必要があるため、作成したPL/SQL関数は次のとおりです。

create or replace
FUNCTION helloworld RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'Hello.world () return java.lang.String';

これは PL/SQL プロシージャです。

create or replace
PROCEDURE hellow
AS
  my_string varchar2(400 char);
begin
  my_string:=helloworld();
  dbms_output.put_line('The value of the string is ' || my_string);
end;

関数とプロシージャの両方が、SQL/開発者を使用して正常にコンパイルされました。

この手順を実行しようとしたとき:

set serveroutput on;
execute hellow;

次のエラーが発生しています。

Error starting at line 2 in command: execute hellow Error report: ORA-29540: class Hello does not exist ORA-06512: at "ORACLE_SOURCE.HELLOWORLD", line 1 ORA-06512: at "ORACLE_SOURCE.HELLOW", line 5 ORA-06512: at line 1
29540. 00000 -  "class %s does not exist"  
*Cause:    Java method execution failed to find a class with the indicated name.
*Action:   Correct the name or add the missing Java class.

.class ファイルも bin フォルダーに配置しましたが、それでも同じエラーが発生します。どなたか、これを見てください。

4

3 に答える 3

17

ストアド プロシージャのように、Java ソースをコンパイルしてデータベースに直接保存することもできます。

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Hello" AS
public class Hello
{
  public static String world()
  {
    return "Hello world";
  }
};
/

> Java created

この関数の呼び出しは簡単で、追加の設定は必要ありません。

CREATE OR REPLACE
FUNCTION helloworld RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'Hello.world () return java.lang.String';
/

DECLARE
   my_string VARCHAR2(400 CHAR);
BEGIN
   my_string := helloworld();
   dbms_output.put_line('The value of the string is ' || my_string);
END;
/

> The value of the string is Hello world

> PL/SQL procedure successfully completed
于 2013-09-03T06:55:45.360 に答える
3

Oracle データベースで Java プログラムを呼び出す前に、それをサーバーにアップロードする必要があります。PL/SQL が Java クラスのメソッドを呼び出す場合、ローカル システムではなく、Oracle サーバー上で実行されている JVM で実行されます。ソース ファイルは、コンパイルされる Oracle システムにアップロードする必要があります。

Oracle の Java アプリケーションでloadjava説明されているように、ツールを使用します。

于 2013-09-03T06:35:48.513 に答える
1

http://docs.oracle.com/cd/B28359_01/java.111/b31225/chthree.htmから

loadjava ツールを使用して、サーバーにクラスをロードします。ユーザー名とパスワードを指定する必要があります。次のように loadjava ツールを実行します。

loadjava -user scott Hello.class
Password: password

詳細については、URL を参照してください。

于 2013-09-03T06:37:03.323 に答える