我们大家都知道在Oracle 8i数据库中,我们经常会发现出现会Oracle运行操作的系统命令.就一般情况而言,利用Oracle Enterprise Manager来设定作业能达到我们想要的目的.但是由于OEM在设定作业缺乏灵活性,设定的作业的参数是固定的。
创新互联是一家专注于网站设计、做网站与策划设计,天山网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:天山等地区。天山做网站价格咨询:18982081108
在实际应用当中往往需要在SQL语句当中运行需要随时Oracle运行操作系统命令.Oracle 8i没有直接运行OS命令的语句,我们可以利用DBMS_PIPE程序包实现这一要求.
DBMS_PIPE通过创建管道,可以让至少两个进程进行通信.Oracle的管道与操作系统的管道在概念上有相同的地方,但是在实现机制不同.
下面介绍实现具体步骤:
1 创建一个程序包,姑且起名叫DAEMON,SQL语句如下:
创建daemon程序包
- CREATE OR REPLACE PACKAGE BODY daemon AS
execute_system是实现运行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运行操作系统命令的创建一个程序包介绍,望你能有所收获。
【编辑推荐】
网页名称:如何正确在Oracle运行操作系统命令?
浏览地址:http://www.shufengxianlan.com/qtweb/news23/125073.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联