利用oracle儲存過程執行作業系統命令
以下方法在WINNT,LINUX下的oracle9i上測試透過,java過程呼叫系統命令
首先給使用java儲存過程的使用者授予一定的許可權
<>表示所有檔案,也可以單獨指定檔案。
r w e d表示四種操作
Code:
Dbms_Java.Grant_Permission('HR',
'java.io.FilePermission', '<>',
'read ,write, execute, delete');
Dbms_Java.Grant_Permission('HR',
'java.io.FilePermission', 'd:aa.bat',
'read ,write, execute, delete');
dbms_java.grant_permission
('HR',
'java.lang.RuntimePermission',
'*',
'writeFileDescriptor' );
end;
/
PL/SQL procedure successfully completed.
See
... timePermission.html
... rityPermission.html
s/api/java/io/FilePermission.html
and
... 53/perf.htm#1001971
From the “Java Developer’s Guide”, Part No. A81353-01, Chapter 5:
Table 5?1 Permission Types
n java.util.PropertyPermission
n java.io.SerializablePermission
n java.io.FilePermission
n java.net.NetPermission
n java.net.SocketPermission
n java.lang.RuntimePermission
n java.lang.reflect.ReflectPermission
n java.security.SecurityPermission
n oracle.aurora.rdbms.security.PolicyTablePermission
n oracle.aurora.security.JServerPermission
相關的java類如下
SQL> connect hr/hr@ts
已連線。
create or replace and compile
java source named "Util"
as
import java.io.*;
import java.lang.*;
public class Util extends Object
{
public static int RunThis(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];
// Echo back what the program spit out
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;
}
}
}
/
Java created.
建立函式
create or replace
function RUN_CMD(p_cmd in varchar2) return number
as
language java
name 'Util.RunThis(java.lang.String) return integer';
/
Function created.
建立一過程呼叫函式
create or replace procedure RC(p_cmd in varchar2)
as
x number;
begin
x := run_cmd(p_cmd);
end;
/
Procedure created.
SQL> variable x number;
SQL> set serveroutput on
SQL> exec dbms_java.set_output(100000);
PL/SQL procedure successfully completed.
可以執行相應的命令和bat檔案
SQL> exec :x := RUN_CMD('ipconfig');
Windows 2000 IP Configuration
Ethernet adapter 本地連線
:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 172.18.25.102
Subnet Mask . . . . . . .
. . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.18.25.1
PL/SQL 過程已成功完成。
也可以執行伺服器上的bat檔案
SQL> exec :x := RUN_CMD('c:aa.bat');
c:oracleora92DATABASE>cmd /c
c:oracleora92DATABASE>dir
Volume in drive C is 本地磁碟
Volume Serial Number is 5CE1-2622
Directory of c:oracleora92DATABASE
2004-05-15 15:47 .
2004-05-15 15:47 ..
2002-12-24 20:13 archive
1998-09-09 18:31 31,744 oradba.exe
2004-05-08 11:48 568 OraDim.Log
2004-03-17 11:53 1,536 PWDweblish.ora
2004-05-15 15:47 1,871,872 SNCFWEBLISH.ORA
2003-12-29 13:24 2,560 SPFILEWEBLISH.ORA
2004-05-08 11:48 12,852 sqlnet.log
6 File(s) 1,921,132 bytes
3 Dir(s) 7,141,621,760 bytes free
-----------------
c:aa.bat如下:
cmd /c
dir [@more@]
首先給使用java儲存過程的使用者授予一定的許可權
<>表示所有檔案,也可以單獨指定檔案。
r w e d表示四種操作
Code:
Dbms_Java.Grant_Permission('HR',
'java.io.FilePermission', '<
'read ,write, execute, delete');
Dbms_Java.Grant_Permission('HR',
'java.io.FilePermission', 'd:aa.bat',
'read ,write, execute, delete');
dbms_java.grant_permission
('HR',
'java.lang.RuntimePermission',
'*',
'writeFileDescriptor' );
end;
/
PL/SQL procedure successfully completed.
See
... timePermission.html
... rityPermission.html
s/api/java/io/FilePermission.html
and
... 53/perf.htm#1001971
From the “Java Developer’s Guide”, Part No. A81353-01, Chapter 5:
Table 5?1 Permission Types
n java.util.PropertyPermission
n java.io.SerializablePermission
n java.io.FilePermission
n java.net.NetPermission
n java.net.SocketPermission
n java.lang.RuntimePermission
n java.lang.reflect.ReflectPermission
n java.security.SecurityPermission
n oracle.aurora.rdbms.security.PolicyTablePermission
n oracle.aurora.security.JServerPermission
相關的java類如下
SQL> connect hr/hr@ts
已連線。
create or replace and compile
java source named "Util"
as
import java.io.*;
import java.lang.*;
public class Util extends Object
{
public static int RunThis(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];
// Echo back what the program spit out
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;
}
}
}
/
Java created.
建立函式
create or replace
function RUN_CMD(p_cmd in varchar2) return number
as
language java
name 'Util.RunThis(java.lang.String) return integer';
/
Function created.
建立一過程呼叫函式
create or replace procedure RC(p_cmd in varchar2)
as
x number;
begin
x := run_cmd(p_cmd);
end;
/
Procedure created.
SQL> variable x number;
SQL> set serveroutput on
SQL> exec dbms_java.set_output(100000);
PL/SQL procedure successfully completed.
可以執行相應的命令和bat檔案
SQL> exec :x := RUN_CMD('ipconfig');
Windows 2000 IP Configuration
Ethernet adapter 本地連線
:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 172.18.25.102
Subnet Mask . . . . . . .
. . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.18.25.1
PL/SQL 過程已成功完成。
也可以執行伺服器上的bat檔案
SQL> exec :x := RUN_CMD('c:aa.bat');
c:oracleora92DATABASE>cmd /c
c:oracleora92DATABASE>dir
Volume in drive C is 本地磁碟
Volume Serial Number is 5CE1-2622
Directory of c:oracleora92DATABASE
2004-05-15 15:47
2004-05-15 15:47
2002-12-24 20:13
1998-09-09 18:31 31,744 oradba.exe
2004-05-08 11:48 568 OraDim.Log
2004-03-17 11:53 1,536 PWDweblish.ora
2004-05-15 15:47 1,871,872 SNCFWEBLISH.ORA
2003-12-29 13:24 2,560 SPFILEWEBLISH.ORA
2004-05-08 11:48 12,852 sqlnet.log
6 File(s) 1,921,132 bytes
3 Dir(s) 7,141,621,760 bytes free
-----------------
c:aa.bat如下:
cmd /c
dir
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1017123/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 系統 儲存過程儲存過程
- Oracle:建立JOB定時執行儲存過程Oracle儲存過程
- oracle 如何終止儲存過程的執行Oracle儲存過程
- java 執行作業系統命令Java作業系統
- oracle 執行儲存過程 ora00131Oracle儲存過程
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- 使用ORACLE 的JAVA儲存過程修改作業系統密碼OracleJava儲存過程作業系統密碼
- /*動態執行儲存過程DEMO*/儲存過程
- oracle 儲存過程執行報錯ORA-12828Oracle儲存過程
- Oracle中執行儲存過程call和exec區別Oracle儲存過程
- 把自編儲存過程設定為系統儲存過程儲存過程
- Oracle儲存過程Oracle儲存過程
- windows程式/執行緒建立過程 --- windows作業系統學習Windows執行緒作業系統
- oracle儲存過程(procedure)中執行動態SQL小記Oracle儲存過程SQL
- 檢視正在執行的儲存過程儲存過程
- 執行Sybase儲存過程並返回ResultSet儲存過程
- 使用ADO執行儲存過程 (轉)儲存過程
- 使用Command執行儲存過程 (轉)儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- Python 執行 Linux 作業系統命令PythonLinux作業系統
- 在PL/SQL中執行作業系統命令SQL作業系統
- 在sqlplus執行作業系統命令SQL作業系統
- Oracle儲存過程-1Oracle儲存過程
- oracle的儲存過程Oracle儲存過程
- Oracle儲存過程例子Oracle儲存過程
- Oracle建立儲存過程Oracle儲存過程
- oracle plsql儲存過程OracleSQL儲存過程
- ORACLE 儲存過程示例Oracle儲存過程
- 【Database】Oracle10g檢視正在執行的儲存過程DatabaseOracle儲存過程
- 儲存過程執行EXECUTE IMMEDIATE沒反應儲存過程
- [MSSQL]sql 儲存過程定時執行方法SQL儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- 作業系統(8)儲存器管理作業系統
- 在PL/SQL中執行作業系統的命令SQL作業系統
- 【SQL Server】常見系統儲存過程SQLServer儲存過程
- 原創:oracle 儲存過程Oracle儲存過程
- oracle 儲存過程批次提交Oracle儲存過程
- oracle 儲存過程學習Oracle儲存過程