关于Oracle中使用Java存储过程的问题

夏洛克艾特 2008-11-19 02:43:12
如题,Oracle中关于Java过程出错了,具体代码如下:

Java存储过程
=================
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "SRCEXECUTE" AS
import java.lang.*;
import java.io.*;

public class ExecuteOS
{
public static void printFile (String fileName) throws IOException
{
File fileOut;
FileReader fileReaderOut;
BufferedReader buffReader;
String strRead;

fileOut = new File (fileName);
fileReaderOut = new FileReader (fileOut);
buffReader = new BufferedReader(fileReaderOut);
while ((strRead = buffReader.readLine()) != null)
System.out.println(strRead);
}

public static void execOSCmd (String cmd) throws IOException, java.lang.InterruptedException
{
String[] strCmd = {"cmd.exe", "/c", "1>c:\\stdout.txt", "2>c:\\stderr.txt", cmd};

System.out.println("==========\r\nExecuting OS command...");
Process p = Runtime.getRuntime().exec(strCmd);
p.waitFor();
System.out.println("\r\n==========\r\nThis was the STANDARD OUTPUT for the command:");
printFile ("c:\\stdout.txt");
System.out.println("\r\n==========\r\nThis was the ERROR OUTPUT for the command:");
printFile ("c:\\stderr.txt");
}
};
以上代码执行后提示“Java已创建”,也就是说上面代码正确;
接着创建一个进程,代码如下:

进程代码:
==============================
create or replace procedure "PROCEXECUTE" (p_command varchar2)
as language java
name 'ExecuteOS.execOSCmd (java.lang.String)';
EXEC PROCEXECUTE ('dir c:');

可是在执行完代码的这段程序则提示“创建的过程带有编译错误”,这里请教大N错误的地方在哪儿,小弟感激不尽!
...全文
179 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
夏洛克艾特 2008-11-19
  • 打赏
  • 举报
回复
#4
按照你的方法做了,不可以!

#11
还得继续试试!
夏洛克艾特 2008-11-19
  • 打赏
  • 举报
回复
#4
BlueskyWide ,你的意思是在SQL×Plus中先执行Java存储过程语句,创建一个Java过程,然后再执行进程代码,最后set serveroutput on;然后执行exec SRCEXECUTE;语句是吗?

我这样做过,可是由于进程代码在编译时有错误,所以不能执行!


#5
还没有试,不过十分感谢您抽出时间看代码,作为菜鸟的我十分感激!;)

#6
java异常不知道,我没有学过java,我只是在Oracle中调用Java存储过程。即以上代码全部在SQL*Plus中执行的!

#7
Java存储过程执行show error,提示无错误

#8
alter java source "SRCEXECUTE" compile;执行该句提示Java已改变!具体说明意思不是很明白!望告知!

#9
整个java存储过程+进程主要用来在SQL*Plus下执行后能得到一个类似cmd的shell

#10
好的,我试试,看是不是权限问题

#11
十分感谢,呵呵!!!

#12
好的,十分感谢!我会试试去

总而言之,ellle十分感谢大家!:)
等下结贴,人人有分!!
wfqqwer5213 2008-11-19
  • 打赏
  • 举报
回复
java的lang包是默认引入的,不用import

execOSCmd调用printFile 方法,printFile 可以throws Exception
让execOSCmd处理异常

建议这样public static String execOSCmd (String cmd)返回的String为错误信息!这样好收集你的JAVA异常信息!否则错在哪里不知道
sleepzzzzz 2008-11-19
  • 打赏
  • 举报
回复
帮你测了一下,是程序对文件的读写权限有问题,按上面方法去做再试试.
sleepzzzzz 2008-11-19
  • 打赏
  • 举报
回复
权限问题的话,参考以下:

exec dbms_java.grant_permission( 'apps',
'SYS:java.net.SocketPermission',
'127.0.0.1:7777',
'connect,resolve') ;

exec dbms_java.grant_permission('apps','java.util.PropertyPermission','*','*');
exec dbms_java.grant_permission('apps','java.io.SerializablePermission','*','*');
exec dbms_java.grant_permission('apps','java.io.FilePermission','*','*');
exec dbms_java.grant_permission('apps','java.net.NetPermission','*','*');
exec dbms_java.grant_permission('apps','java.net.SocketPermission','*','*');
exec dbms_java.grant_permission('apps','java.lang.RuntimePermission','*','*');
exec dbms_java.grant_permission('apps','java.lang.reflect.ReflectPermission','*','*');
exec dbms_java.grant_permission('apps','java.security.SecurityPermission','*','*');
exec dbms_java.grant_permission('apps','oracle.aurora.rdbms.security.PolicyTablePermission','*','*');
exec dbms_java.grant_permission('apps','oracle.aurora.security.JServerPermission','*','*');
wfqqwer5213 2008-11-19
  • 打赏
  • 举报
回复

public class AccessControlExceptionextends SecurityException
此异常由 AccessController 抛出,提示请求的访问(对关键系统资源(如文件系统或网络)的访问)被拒绝。

拒绝访问的原因各不相同。例如,请求的权限可能类型不正确、包含无效值,或者根据安全策略不允许请求访问。在抛出异常时,只要可能,就应给出此类信息。
sleepzzzzz 2008-11-19
  • 打赏
  • 举报
回复
SQL> alter java source "SRCEXECUTE" compile;


sleepzzzzz 2008-11-19
  • 打赏
  • 举报
回复
java已创建并不代表你procedure能被正确编译.

检查一下你的语法再试.
wfqqwer5213 2008-11-19
  • 打赏
  • 举报
回复
用try catch处理异常把,你把JAVA异常给oracle过程处理?
BlueskyWide 2008-11-19
  • 打赏
  • 举报
回复
--在Oracle中如下执行存贮过程:

exec SRCEXECUTE;
wfqqwer5213 2008-11-19
  • 打赏
  • 举报
回复
create or replace and compile java source named SRCEXECUTE as
import java.io.*;
public class ExecuteOS
{
public static void printFile (String fileName) throws Exception
{
File fileOut;
FileReader fileReaderOut;
BufferedReader buffReader;
String strRead;

fileOut = new File (fileName);
fileReaderOut = new FileReader (fileOut);
buffReader = new BufferedReader(fileReaderOut);
while ((strRead = buffReader.readLine()) != null)
System.out.println(strRead);
}

public static void execOSCmd (String cmd) throws Exception
{
String[] strCmd = {"cmd.exe", "/c", "1>c:\\stdout.txt", "2>c:\\stderr.txt", cmd};

System.out.println("==========\r\nExecuting OS command...");
Process p = Runtime.getRuntime().exec(strCmd);
p.waitFor();
System.out.println("\r\n==========\r\nThis was the STANDARD OUTPUT for the command:");
printFile ("c:\\stdout.txt");
System.out.println("\r\n==========\r\nThis was the ERROR OUTPUT for the command:");
printFile ("c:\\stderr.txt");
}

public static void entry()
{
}
}
夏洛克艾特 2008-11-19
  • 打赏
  • 举报
回复
传说中的高手都哪儿去了?
夏洛克艾特 2008-11-19
  • 打赏
  • 举报
回复
自己顶起来!
夏洛克艾特 2008-11-19
  • 打赏
  • 举报
回复
在线等!

684

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧