一般的情况下在Oracle 8i中,经常会出现这种情况,即,在存储过程中出现Oracle运行操作系统命令,一般的情况我们就是利用Oracle Enterprise Manager来设定作业时可以达到这个目的.但是由于OEM在设定作业缺乏灵活性,设定的作业的参数是固定的.。

在实际应用当中往往需要在SQL语句当中Oracle运行需要随时运行操作系统命令.Oracle 8i没有直接运行OS命令的语句,我们可以利用DBMS_PIPE程序包实现这一要求.
DBMS_PIPE通过创建管道,可以让至少两个进程进行通信.Oracle的管道与操作系统的管道在概念上有相同的地方,但是在实现机制不同. 
下面介绍实现具体步骤:
1 创建一个程序包,姑且起名叫DAEMON,SQL语句如下:
/*创建daemon程序包*/
- CREATE OR REPLACE PACKAGE BODY daemon AS
 
/*execute_system是实现Oracle运行os命令的函数*/
- FUNCTION execute_system(command VARCHAR2,
 - timeout NUMBER DEFAULT 10)
 - RETURN NUMBER IS
 - status NUMBER;
 - result VARCHAR2(20);
 - command_code NUMBER;
 - pipe_name VARCHAR2(30);
 - BEGIN
 - pipe_name := DBMS_PIPE.UNIQUE_SESSION_NAME;
 - DBMS_PIPE.PACK_MESSAGE(''SYSTEM'');
 - DBMS_PIPE.PACK_MESSAGE(pipe_name);
 - DBMS_PIPE.PACK_MESSAGE(command);
 
/*向daemon管道发送表示命令的字符*/
- status := DBMS_PIPE.SEND_MESSAGE(''daemon'', timeout);
 - IF status <> 0 THEN
 - RAISE_APPLICATION_ERROR(-20010,
 - ''Execute_system: Error while sending. Status = '' || status);
 - END IF;
 - status := DBMS_PIPE.RECEIVE_MESSAGE(pipe_name, timeout);
 - IF status <> 0 THEN
 - RAISE_APPLICATION_ERROR(-20011,
 - ''Execute_system: Error while receiving.
 - Status = '' || status);
 - END IF;
 
/*获取返回结果*/
- DBMS_PIPE.UNPACK_MESSAGE(result);
 - IF result <> ''done'' THEN
 - RAISE_APPLICATION_ERROR(-20012,
 - ''Execute_system: Done not received.'');
 - END IF;
 - DBMS_PIPE.UNPACK_MESSAGE(command_code);
 - DBMS_OUTPUT.PUT_LINE(''System command executed. result = '' ||
 - command_code);
 - RETURN command_code;
 - END execute_system;
 
/*stop是让daemon停止*/
- PROCEDURE stop(timeout NUMBER DEFAULT 10) IS
 - status NUMBER;
 - BEGIN
 - DBMS_PIPE.PACK_MESSAGE(''STOP'');
 - status := DBMS_PIPE.SEND_MESSAGE(''daemon'', timeout);
 - IF status <> 0 THEN
 - RAISE_APPLICATION_ERROR(-20030,
 - ''stop: error while sending. status = '' || status);
 - END IF;
 - END stop;
 - END daemon;
 
通过Sql*Plus运行以上语句,将为当前用户创建daemon程序包. 上述的相关内容就是在Oracle运行操作系统命令中如何创建一个程序包,姑且起名叫DAEMON,SQL语句如下的描述,希望会给你带来一些帮助在此方面。
文章出自: http://www.programbbs.com/doc/class10-3.htm
【编辑推荐】
                当前标题:Oracle运行时需要的随时运行操作系统命令有哪些
                
                分享URL:http://www.csdahua.cn/qtweb/news16/384866.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网