2013年(118)
分类: Oracle
2013-10-08 11:01:08
原文地址:oracle调用JAVA类的方法 作者:traveler99
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 -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 -v -resolve hello.java
loadjava -u -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文件
-- The End --