国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle數(shù)據(jù)庫中如何直接運(yùn)行OS命令

2024-08-29 13:50:31
字體:
供稿:網(wǎng)友
在Oracle 8i中,往往會(huì)出現(xiàn)要在存儲(chǔ)過程中運(yùn)行操作系統(tǒng)命令的情況。一般來說,利用Oracle EnterPRise Manager設(shè)定作業(yè)時(shí)可以達(dá)到這個(gè)目的。但是由于OEM在設(shè)定作業(yè)缺 乏靈活性,設(shè)定的作業(yè)的參數(shù)是固定的。在實(shí)際應(yīng)用當(dāng)中往往需要在SQL語句當(dāng)中運(yùn)行需要隨時(shí)運(yùn)行操作系統(tǒng)命令。Oracle 8i沒有直接運(yùn)行OS命令的語句,我們可以利用DBMS_PipE程序包實(shí)現(xiàn)這一要求。 DBMS_PIPE通過創(chuàng)建管道,可以讓至少兩個(gè)進(jìn)程進(jìn)行通信。Oracle的管道與操作系統(tǒng)的管道在概念上有相同的地方,但是在實(shí)現(xiàn)機(jī)制不同。 下面介紹實(shí)現(xiàn)具體步驟: 1、創(chuàng)建一個(gè)程序包,姑且起名叫DAEMON,SQL語句如下:
  /*創(chuàng)建daemon程序包*/   CREATE OR REPLACE PACKAGE BODY daemon AS   /*execute_system是實(shí)現(xiàn)運(yùn)行os命令的函數(shù)*/   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管道發(fā)送表示命令的字符*/   status := DBMS_PIPE.SEND_MESSAGE('daemon', timeout);   IF status <> 0 THEN   RAISE_application_ERROR(-20010,   'Execute_system: Error while sending. Status = ' status);   END IF; [page]  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;   /*獲取返回結(jié)果*/   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運(yùn)行以上語句,將為當(dāng)前用戶創(chuàng)建daemon程序包。 2、創(chuàng)建在OS上運(yùn)行的守護(hù)進(jìn)程,監(jiān)聽由上面的daemon程序包發(fā)來的要求執(zhí)行os命令的語句。以下Pro*C的代碼,必須由pro*c先進(jìn)行預(yù)編譯。
  #include   #include   EXEC SQL INCLUDE SQLCA;   EXEC SQL BEGIN DECLARE SECTION;   char *uid = "scott/tiger";/*在這個(gè)地方改為你自己訪問的用戶,密碼,服務(wù)名*/   int status;   VARCHAR command;   VARCHAR value[2000];   VARCHAR return_name[30];   EXEC SQL END DECLARE SECTION;   void   connect_error()   {   char msg_buffer[512];   int msg_length;   int buffer_size = 512;


上一篇:教你如何處理Oracle數(shù)據(jù)庫中的壞塊

下一篇:ORACLE中常用的SQL語法和數(shù)據(jù)對(duì)象

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 潮安县| 英超| 兰坪| 伽师县| 青川县| 颍上县| 长白| 睢宁县| 周口市| 镇远县| 永昌县| 灌阳县| 福鼎市| 昔阳县| 亳州市| 广丰县| 大同市| 申扎县| 法库县| 兴隆县| 如皋市| 湖州市| 咸阳市| 平凉市| 诸暨市| 田林县| 文昌市| 安陆市| 石渠县| 奎屯市| 大兴区| 太原市| 临武县| 乐清市| 宁强县| 海淀区| 巩留县| 亚东县| 青海省| 六枝特区| 皮山县|