| /*创建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; |
|
| 【内容导航】 | |
| 第1页:在Oracle数据库中运行操作系统命令 | 第2页:在Oracle数据库中运行操作系统命令 |