oracle调用java方法错误: ORA-29541: 无法解析类.过程如下:
1.首先我做了新建了一个测试的项目,里面就只有一个单独的Main测试类. 里面有一个方法:
public static String sayHello(String name){
return " hello " + name;
}
2.然后把项目打包成prj.jar.
我用loadjava -user sys/sys@databaseName prj.jar
select DBMS_JAVA.LONGNAME(OBJECT_NAME) as OBJECT_NAME
from USER_OBJECTS
where OBJECT_TYPE like 'JAVA%'
and object_name like '%Main'
已经查询到这个类.
3.然后在oracle中发布java程序:
create or replace function hello (name VARCHAR2) return VARCHAR2
as language java name
'Main.sayHello (java.lang.String) return java.lang.String ';
执行:
select hello(' world! ') from dual;
提示:ORA-29541: 无法解析类 SYS.Main.
请指教.
1.首先我做了新建了一个测试的项目,里面就只有一个单独的Main测试类. 里面有一个方法:
public static String sayHello(String name){
return " hello " + name;
}
2.然后把项目打包成prj.jar.
我用loadjava -user sys/sys@databaseName prj.jar
select DBMS_JAVA.LONGNAME(OBJECT_NAME) as OBJECT_NAME
from USER_OBJECTS
where OBJECT_TYPE like 'JAVA%'
and object_name like '%Main'
已经查询到这个类.
3.然后在oracle中发布java程序:
create or replace function hello (name VARCHAR2) return VARCHAR2
as language java name
'Main.sayHello (java.lang.String) return java.lang.String ';
执行:
select hello(' world! ') from dual;
提示:ORA-29541: 无法解析类 SYS.Main.
请指教.
解决方案 »
- 在oracle中求一简单sql
- 想用expdp导出用户的所有东西
- SQL语句
- 求一存储过程的写法(简单逻辑处理)
- 如何把数据库生成的脚本".sql"文件通过sql plus 导入到oracle指定的用户下
- 在一个package中的function不能递归调用自己吗?
- OracleJSP: oracle.jsp.parse.JspParseException: 行 # 1, <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
- 新手提问:请问图片怎样存储?
- 请教!用何种方式处理这样的大量查询。。。。
- 求left join on使用子查询详细用法
- oracle 触发器 插入一条数据 调用了两次触发器
- Cannot load the DBMS ORACLE Version 9i!!
现在,10G及其以后版本的Oracle数据库提供了对Java程序的更多的支持,很好的解决了这方面的问题. 解决方法如下,
1. 首先我们创建调用操作系统命令的Java方法
create or replace and compile java source named oscmd as
import java.io.*;
import java.lang.*;
public class OSCmd extends Object {
public static int OSCmd(String args) {
Runtime rt = Runtime.getRuntime();
int rc = -1;
try {
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis = new BufferedInputStream(p.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];
while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
rc = p.waitFor();
} catch (Exception e) {
e.printStackTrace();
rc = -1;
} finally {
return rc;
}
}
}
2. 然后,再创建一个PL/SQL函数调用Java方法
CREATE OR REPLACE FUNCTION Run_Cmd(p_Cmd IN VARCHAR2) RETURN NUMBER AS LANGUAGE JAVA NAME 'OSCmd.OSCmd(java.lang.String) return integer';
3. 之后我们就可以轻松的在Oracle程序中调用操作系统命令了
declare
n number;
begin
n := Run_Cmd('Copy C:\temp.txt D:\temp.txt');
end;
test/Main.javapackage test;public class Main{
public static String sayHello(String name){
return " hello " + name;
}
}
编译
javac test/Main.java
打包
jar cvf test.jar test/Main.class
加载
loadjava -r -user hr/oracle test.jar创建函数create or replace function hello (name VARCHAR2) return VARCHAR2
as language java name
'test.Main.sayHello (java.lang.String) return java.lang.String ';
测试语句select hello('Amy') from dual;
结果
HELLO('AMY')
-----------------
hello Amy
1 row selected.
oracle 10的JDK应该是1.5