zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

oracle执行cmd的实现方法

Oracle方法执行 实现 cmd
2023-06-13 09:14:09 时间
不过有一个简单的执行cmd命令方法:
SQL>hostnetuser
Useraccountsfor\\PC-ATQHJ4UG1SDA
----------------------------------------------------------------------------
__vmware_user__adminAdministrator
ASPNETGuestIUSR_PC-ATQHJ4UG1SDA
IWAM_PC-ATQHJ4UG1SDASUPPORT_388945a0
Thecommandcompletedsuccessfully.
unix或linux下用
!command
======================补充======================
网上的另两种方法:
1是利用msvcrt.dll
写一个c:\orac.sql
内容:
Rem
Remoracmd.sql
Rem
RemRunsystemcommandsviaOracledatabaseservers
Rem
RemBugstodavid@ngssoftware.com
Rem
CREATEORREPLACELIBRARYexec_shellAS
"C:\windows\system32\msvcrt.dll";
/
showerrors
CREATEORREPLACEPACKAGEoracmdIS
PROCEDUREexec(cmdstringINCHAR);
endoracmd;
/
showerrors
CREATEORREPLACEPACKAGEBODYoracmdIS
PROCEDUREexec(cmdstringINCHAR)
ISEXTERNAL
NAME"system"LIBRARYexec_shell
LANGUAGEC;
endoracmd;
/
showerrors
然后C:\>sqlplus/nolog
SQL*Plus:Release8.1.7.0.0-ProductiononThuJun714:25:382001
(c)Copyright2000OracleCorporation.Allrightsreserved.
SQL>connectsystem/manager@orcl(分别是用户名密码和sid)
Connected.
SQL>@c:\orac.sql
Librarycreated.
Noerrors.
Packagecreated.
Noerrors.
Packagebodycreated.
Noerrors.
SQL>
SQL>execoracmd.exec("dir>c:\oracle.txt");
结果在我本机出现
第1行出现错误:
ORA-28595:Extproc代理:DLL路径无效
ORA-06512:在"SYSTEM.ORACMD",line2
ORA-06512:在line1
没有成功。
第二种方法
c:\1.sql
createorreplaceandcompile
javasouRCenamed"util"
as
importjava.io.*;
importjava.lang.*;
publicclassutilextendsObject
{
publicstaticintRunThis(Stringargs)
{
Runtimert=Runtime.getRuntime();
intRC=-1;
try
{
Processp=rt.exec(args);
intbufSize=4096;
BufferedInputStreambis=newBufferedInputStream(p.getInputStream(),bufSize);
intlen;
bytebuffer[]=newbyte[bufSize];
//Echobackwhattheprogramspitout
while((len=bis.read(buffer,0,bufSize))!=-1)
System.out.write(buffer,0,len);
RC=p.waitFor();
}
catch(Exceptione)
{
e.printStackTrace();
RC=-1;
}
finally
{
returnRC;
}
}
}
c:\2.sql
createorreplace
functionRUN_CMz(p_cmdinvarchar2)returnnumber
as
languagejava
name"util.RunThis(java.lang.String)returninteger";
c:\3.sql
createorreplaceprocedureRC(p_cmdinvarChar)
as
xnumber;
begin
x:=RUN_CMz(p_cmd);
end;
登陆上去后依旧是依次执行
SQL>@c:\1.sql
/
@c:\2.sql
/
@c:\3.sql
/
variablexnumber;
setserveroutputon;
execdbms_java.set_output(100000);
grantjavasysprivtosystem;
grantjavauserprivtosystem;(网上的方法没有这一行,我无法成功,加上去可以)
exec:x:=run_cmz("ipconfig");成功运行了命令
测试环境win2003+oracle11g