任何人都可以帮我这个:我想从Pl / SQL,Oracle RDBMS调用一个java程序,下面是设置
Windows 7机器,安装了Java C:\ Program Files \ Java \ jdk1.7.0_02
我创建了一个目录来保存java文件。 D:\ Java,里面有一个hello.java文件。
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文件夹中,但仍然会出现同样的错误。 任何人都可以看看这个。
答案 0 :(得分:13)
您还可以直接在数据库中编译和保存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
答案 1 :(得分:3)
在Oracle数据库中调用Java程序之前,必须将其上载到服务器。当PL / SQL调用Java类的方法时,它在Oracle服务器上运行的JVM 中执行,而不是在本地系统上执行,并且源文件必须上载到Oracle系统,在那里它们获得编译。
使用loadjava
工具,如Java Applications on Oracle
答案 2 :(得分:1)
来自http://docs.oracle.com/cd/B28359_01/java.111/b31225/chthree.htm
使用loadjava工具在服务器上加载类。您必须指定用户名和密码。运行loadjava工具,如下所示:
loadjava -user scott Hello.class
Password: password
请参阅URL以获取更多信息。