知识大全 Oracle中如何直接运行OS命令(上)

Posted 命令

篇首语:旦旦而学之,久而不怠焉,迄乎成。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle中如何直接运行OS命令(上)相关的知识,希望对你有一定的参考价值。

Oracle中如何直接运行OS命令(上)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在Oracle i中 往往会出现要在存储过程中运行操作系统命令的情况 一般来说 利用Oracle EntERPrise Manager设定作业时可以达到这个目的 但是由于OEM在设定作业缺乏灵活性 设定的作业的参数是固定的 在实际应用当中往往需要在SQL语句当中运行需要随时运行操作系统命令 Oracle i没有直接运行OS命令的语句 我们可以利用DBMS_PIPE程序包实现这一要求     DBMS_PIPE通过创建管道 可以让至少两个进程进行通信 Oracle的管道与操作系统的管道在概念上有相同的地方 但是在实现机制不同     下面介绍实现具体步骤:     创建一个程序包 姑且起名叫DAEMON SQL语句如下:    /*创建daemon程序包*/  CREATE OR REPLACE PACKAGE BODY daemon AS  /*execute_system是实现运行os命令的函数*/  FUNCTION execute_system(mand VARCHAR   timeout NUMBER DEFAULT )  RETURN NUMBER IS    status NUMBER   result VARCHAR ( )   mand_code NUMBER   pipe_name VARCHAR ( )   BEGIN  pipe_name := DBMS_PIPE UNIQUE_SESSION_NAME   DBMS_PIPE PACK_MESSAGE( SYSTEM )   DBMS_PIPE PACK_MESSAGE(pipe_name)   DBMS_PIPE PACK_MESSAGE(mand)   /*向daemon管道发送表示命令的字符*/  status := DBMS_PIPE SEND_MESSAGE( daemon timeout)   IF status <> THEN  RAISE_APPLICATION_ERROR(    Execute_system: Error while sending Status = || status)   END IF [page]  status := DBMS_PIPE RECEIVE_MESSAGE(pipe_name timeout)   IF status <> THEN  RAISE_APPLICATION_ERROR(    Execute_system: Error while receiving   Status = || status)   END IF   /*获取返回结果*/  DBMS_PIPE UNPACK_MESSAGE(result)   IF result <> done THEN  RAISE_APPLICATION_ERROR(    Execute_system: Done not received )   END IF     DBMS_PIPE UNPACK_MESSAGE(mand_code)   DBMS_OUTPUT PUT_LINE( System mand executed result = ||  mand_code)   RETURN mand_code   END execute_system   /*stop是让daemon停止*/  PROCEDURE stop(timeout NUMBER DEFAULT ) IS  status NUMBER   BEGIN  DBMS_PIPE PACK_MESSAGE( STOP )   status := DBMS_PIPE SEND_MESSAGE( daemon timeout)   IF status <> THEN  RAISE_APPLICATION_ERROR(    stop: error while sending status = || status)   END IF   END stop   END daemon     通过Sql*Plus运行以上语句 将为当前用户创建daemon程序包       创建在OS上运行的守护进程 监听由上面的daemon程序包发来的要求执行os命令的语句 以下Pro*C的代码 必须由pro*c先进行预编译     #include  #include    EXEC SQL INCLUDE SQLCA     EXEC SQL BEGIN DECLARE SECTION   char *uid = scott/tiger ;/*在这个地方改为你自己访问的用户 密码 服务名*/  int status   VARCHAR mand[ ]   VARCHAR value[ ]   VARCHAR return_name[ ]   EXEC SQL END DECLARE SECTION     void  connect_error()    char msg_buffer[ ]   int msg_length   int buffer_size = cha138/Article/program/Oracle/201311/17032

相关参考

知识大全 Oracle中通过命令行实现定时操作详解

Oracle中通过命令行实现定时操作详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Orac

知识大全 Oracle服务器常用命令行工具一览

Oracle服务器常用命令行工具一览  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ()数据库管

知识大全 详细讲解Oracle服务器的常用命令行

详细讲解Oracle服务器的常用命令行  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!数据库管理相关

知识大全 cmd命令行模式

  Oracle数据导入导出imp/exp就相当于oracle数据还原与备份exp命令可以把数据从远程数据库服务器导出到本地的dmp文件imp命令可以把dmp文件从本地导入到远处的数据库服务器中利用这

知识大全 重装OS及Oracle软件,巧用RMAN恢复数据

重装OS及Oracle软件,巧用RMAN恢复数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 oracle锁的管理practiced

  今天参考了一些文档作了以下一点实验记录了整个过程留个记录吧  一插入时锁的情况  打开一个命令行窗口用sqlplus登陆到oracle  c[oracle@qatest~]$sqlplusfort

知识大全 Oracle中tnsping命令解析

Oracle中tnsping命令解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle

知识大全 入门oracle命令语录

  哎一学期又结束了我想把这些简单命令记录下虽然可能我不会深入研究oracle搞不好以后也会要用到的时候现在花点时间把它给存起来  怎么安装oracle软件我就不介绍了只要下个安装包接下来的安装就不在

知识大全 Oracle设置归档模式的命令

Oracle设置归档模式的命令  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle数据库

知识大全 oracle创建用户快捷命令

  createtablespacejfxtdatafileE:\\oracle\\oradata\\oradb\\jfxtorasizemreusedefaultstorage(initialkne