oracle调用JAVA类的方法主要有以下三种:
1. 用loadjava方法装载;
可能是调试方便,据说这种方法比较通用。
c:\test\hello.java
public class hello
{
?
?public static void main(String[] args)
?{
??System.out.println("Hello");
??hello h = new hello();
??h.insertM(9);
?}
?public static void insertM(int pid)
?{
??System.out.println("This is the method insertM.");
?}
}
?C:\test>loadjava -u?test/test@mydb?-v -resolve hello.java
SQL> create procedure prc_hehe as language java name 'hello.main(java.lang.String[])
? 2? /
过程已创建。
SQL> call prc_hehe();
调用完成。
SQL> set serveroutput on size 2000
SQL> call prc_hehe();
调用完成。
SQL> exec dbms_java.set_output(2000);
PL/SQL 过程已成功完成。
SQL> call prc_hehe();
Hello
This is the method insertM.
调用完成。
SQL>show errors;
?
修改java类,先删除再装载,方法:
dropjava -u?test/test@mydb?-v -resolve hello.java
loadjava -u?test/test@mydb?-v -resolve hello.java
?
2. 用sql语句创建
create or replace and compile java source named hehe
AS
public class hello
{
?public static void msg(String name)
?{
??System.out.println("hello,"+name);
?}
};
?
create or replace procedure prc_hehe
(
?????? p_name VARCHAR2
)
as
language java name 'hello.msg(java.lang.String)';
/
-- 调用结果
SQL> call prc_hehe('oopp');
hello,oopp
?
3. 用外部class文件来装载创建
create or replace directory CLASS_DIR? as 'c:\test';
?
create or replace java class using bfile(class_dir,'hello.class');
?
create or replace procedure prc_hello
(
?????? p_name VARCHAR2
)
as
language java name 'hello.msg(java.lang.String)';
-- 测试结果
SQL> call prc_hello('java');
java
?
4. 可能出现的错误
SQL> call prc_hello('Jerry');
call prc_hello('Jerry')
???? *
第 1 行出现错误:
ORA-29516: Aurora 断言失败: Assertion failure at eox.c:359
Uncaught exception System error:?? java/lang/UnsupportedClassVersionError
?
原因:机器装了多个java版本,oracle的java版本低于环境变量设置的版本。
解决方法:用$ORACLE_HOME/jdk/javac 重新编译java文件