亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Oracle數據庫中如何直接運行OS命令

瀏覽:102日期:2023-11-12 14:50:08
在Oracle 8i中,往往會出現要在存儲過程中運行操作系統命令的情況。一般來說,利用Oracle Enterprise Manager設定作業時可以達到這個目的。但是由于OEM在設定作業缺 乏靈活性,設定的作業的參數是固定的。在實際應用當中往往需要在SQL語句當中運行需要隨時運行操作系統命令。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程序包。 2、創建在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 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 數據庫
主站蜘蛛池模板: 免费的看黄网站 | 麻豆 一区 精品 在线 | 中文字幕亚洲欧美一区 | 久久久久久久久久综合情日本 | 天天色综| 在线看黄色| 91私密视频| a级欧美片免费观看 | 国产在线a不卡免费视频 | 黄色天天影视 | 美国黄色一级大片 | 欧美视频网站免费看 | 久久综合中文字幕一区二区三区 | 美利坚永久精品视频在线观看 | 日韩免费黄色片 | 欧美日韩亚洲第一页 | 国产精品久久久久久吹潮 | 国产精品日韩一区二区三区 | 精品高清写真视频在线 | 毛片免费网站 | 精品国产第一国产综合精品gif | 日本韩国一级片 | 色老头xxxwww作爱视频 | 免费香蕉一区二区在线观看 | 亚洲xx站| 国语一级片| 日本成aⅴ人片日本伦 | 婷婷色综合久久五月亚洲 | 国产精品美女久久久久网站 | 欧美日韩不卡中文字幕在线 | 女人天堂网在线观看2019 | 黄色a级毛片 | 欧美在线视频 一区二区 | 女视频www女中国 | 欧美日韩一本大道香蕉欧美 | 日韩3级 | 欧洲在线免费视频 | 亚洲区欧美中文字幕久久 | 嫩草在线视频www免费观看 | 女人大毛片一级毛片一 | 亚洲国产精品区 |