有没有办法在ORACLE存储过程中运行外部的一个EXE程序,在线等 好像比较麻烦,这不是数据库的特色存储过程主要是对数据库操作的当然也可以引入java存储过程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 测试环境9I+2000SQL>CREATE OR REPLACE AND COMPILE 2 JAVA SOURCE NAMED "Util" 3 AS 4 import java.io.*; 5 import java.lang.*; 6 7 public class Util extends Object 8 { 910 public static int RunThis(String[] args)11 {12 Runtime rt = Runtime.getRuntime();13 int rc = -1;1415 try16 {17 Process p = rt.exec(args[0]);1819 int bufSize = 4096;20 BufferedInputStream bis =21 new BufferedInputStream(p.getInputStream(), bufSize);22 int len;23 byte buffer[] = new byte[bufSize];2425 // Echo back what the program spit out26 while ((len = bis.read(buffer, 0, bufSize)) != -1)27 System.out.write(buffer, 0, len);2829 rc = p.waitFor();30 }31 catch (Exception e)32 {33 e.printStackTrace();34 rc = -1;35 }36 finally37 {38 return rc;39 }40 }41 }42 /Java 已创建。SQL>SQL>BEGIN 2 DBMS_JAVA.GRANT_PERMISSION 3 ( USER, 4 'java.io.FilePermission', 5 -- '/usr/bin/ps', -- for UNIX 6 'C:\WINNT\system32\cmd.EXE', -- for WINDOWS 7 'execute'); 8 9 DBMS_JAVA.GRANT_PERMISSION (10 USER,11 'java.lang.RuntimePermission',12 '*',13 'writeFileDescriptor' );14 END;15 /PL/SQL 过程已成功完成。SQL>SQL> CREATE OR REPLACE FUNCTION RUN_CMD ( 2 P_CMD IN VARCHAR2) 3 RETURN NUMBER 4 AS 5 LANGUAGE JAVA 6 NAME 'Util.RunThis(java.lang.String[]) return integer'; 7 /函数已创建。SQL>SQL> CREATE OR REPLACE PROCEDURE RC ( 2 P_CMD IN VARCHAR2) 3 AS 4 X NUMBER; 5 BEGIN 6 X := RUN_CMD (P_CMD); 7 8 IF (X <> 0) 9 THEN10 RAISE PROGRAM_ERROR;11 END IF;12 END;13 /过程已创建。SQL> SET serveroutput on size 1000000SQL> EXEC dbms_java.set_output(1000000)PL/SQL 过程已成功完成。SQL> EXEC rc('C:\WINNT\system32\cmd.exe /c dir')Volume in drive E has no label.Volume Serial Number is B897-BAF5Directory of E:\Oracle\Ora81\DATABASE2003-11-18 14:54 <DIR> .2003-11-18 14:54 <DIR> ..2003-07-04 13:55 <DIR> ARCHIVE2003-07-04 13:57 43 initorcl.ora2003-07-04 13:55 31,744 ORADBA.EXE2003-11-21 10:28 140 oradim.log2003-11-13 11:38 1,536 PWDorcl.ora4 File(s) 33,463 bytes3 Dir(s) 1,622,405,120 bytes freePL/SQL 过程已成功完成。SQL> 学习[1]: (Error): ORA-04031: 无法分配 4032 字节的共享内存 ("shared pool","unknown object","joxs heap init","ioc_allocate_pal") 无语。。。。 如何解决left join 被关联表不能带条件的问题 50分求一条sql语句,符合结果立即结贴,在线等 急 sql性能问题 ORACLE 用正则表达式如何匹配回车换行? 问一下这条sql,为什么不能这么写? 求助:一个sql的写法,可能是很常见的,但是不知道如何修改 关于网络服务名以及的很菜的一个问题,各位进来看看 oracle(8.1.6)的联机帮助.是怎样搞的? 请问如何远程连接oracle? 请问如何设置才能使Oracle对数据对象的名字大小写敏感? 关于游标优化
2 JAVA SOURCE NAMED "Util"
3 AS
4 import java.io.*;
5 import java.lang.*;
6
7 public class Util extends Object
8 {
9
10 public static int RunThis(String[] args)
11 {
12 Runtime rt = Runtime.getRuntime();
13 int rc = -1;
14
15 try
16 {
17 Process p = rt.exec(args[0]);
18
19 int bufSize = 4096;
20 BufferedInputStream bis =
21 new BufferedInputStream(p.getInputStream(), bufSize);
22 int len;
23 byte buffer[] = new byte[bufSize];
24
25 // Echo back what the program spit out
26 while ((len = bis.read(buffer, 0, bufSize)) != -1)
27 System.out.write(buffer, 0, len);
28
29 rc = p.waitFor();
30 }
31 catch (Exception e)
32 {
33 e.printStackTrace();
34 rc = -1;
35 }
36 finally
37 {
38 return rc;
39 }
40 }
41 }
42 /Java 已创建。SQL>
SQL>BEGIN
2 DBMS_JAVA.GRANT_PERMISSION
3 ( USER,
4 'java.io.FilePermission',
5 -- '/usr/bin/ps', -- for UNIX
6 'C:\WINNT\system32\cmd.EXE', -- for WINDOWS
7 'execute');
8
9 DBMS_JAVA.GRANT_PERMISSION (
10 USER,
11 'java.lang.RuntimePermission',
12 '*',
13 'writeFileDescriptor' );
14 END;
15 /PL/SQL 过程已成功完成。SQL>
SQL> CREATE OR REPLACE FUNCTION RUN_CMD (
2 P_CMD IN VARCHAR2)
3 RETURN NUMBER
4 AS
5 LANGUAGE JAVA
6 NAME 'Util.RunThis(java.lang.String[]) return integer';
7 /函数已创建。SQL>
SQL> CREATE OR REPLACE PROCEDURE RC (
2 P_CMD IN VARCHAR2)
3 AS
4 X NUMBER;
5 BEGIN
6 X := RUN_CMD (P_CMD);
7
8 IF (X <> 0)
9 THEN
10 RAISE PROGRAM_ERROR;
11 END IF;
12 END;
13 /过程已创建。SQL> SET serveroutput on size 1000000
SQL> EXEC dbms_java.set_output(1000000)PL/SQL 过程已成功完成。SQL> EXEC rc('C:\WINNT\system32\cmd.exe /c dir')
Volume in drive E has no label.
Volume Serial Number is B897-BAF5
Directory of E:\Oracle\Ora81\DATABASE
2003-11-18 14:54 <DIR> .
2003-11-18 14:54 <DIR> ..
2003-07-04 13:55 <DIR> ARCHIVE
2003-07-04 13:57 43 initorcl.ora
2003-07-04 13:55 31,744 ORADBA.EXE
2003-11-21 10:28 140 oradim.log
2003-11-13 11:38 1,536 PWDorcl.ora
4 File(s) 33,463 bytes
3 Dir(s) 1,622,405,120 bytes freePL/SQL 过程已成功完成。SQL>
[1]: (Error): ORA-04031: 无法分配 4032 字节的共享内存 ("shared pool","unknown object","joxs heap init","ioc_allocate_pal")