如题,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错误的地方在哪儿,小弟感激不尽!
=================
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错误的地方在哪儿,小弟感激不尽!
解决方案 »
- 有没有工具或快捷的方式把SQLserver 的SQL 命令转成Oracle 下格式的!?
- oracle有没有提供一种技术可以将存储过程等发布为web service呢
- 为什么oracle存储过程在执行时间长了就在执行完了後自动回滚了啊?
- oracle 连接问题
- oracle 11G em表空间重命名
- 帮我检查一下,这个sql语句,谢谢!
- 大数据量,两表比较操作性能!
- 大家好,国庆节快乐!问一个关于UPDATE语句的问题?
- 关于我的未来。。。请各位高手和斑竹指点迷津。。
- 谁能告诉我有介绍关于stored program unit “type”概念的地方!帮我在这儿解释一下也行!
- 如何按id降序取前十条记录??
- oracle10g 服务该启动那几项 谢谢!
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()
{
}
}
public class AccessControlExceptionextends SecurityException
此异常由 AccessController 抛出,提示请求的访问(对关键系统资源(如文件系统或网络)的访问)被拒绝。 拒绝访问的原因各不相同。例如,请求的权限可能类型不正确、包含无效值,或者根据安全策略不允许请求访问。在抛出异常时,只要可能,就应给出此类信息。
'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','*','*');
让execOSCmd处理异常建议这样public static String execOSCmd (String cmd)返回的String为错误信息!这样好收集你的JAVA异常信息!否则错在哪里不知道
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十分感谢大家!:)
等下结贴,人人有分!!