程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 如何正確在Oracle運行操作系統命令?

如何正確在Oracle運行操作系統命令?

編輯:Oracle數據庫基礎

我們大家都知道在Oracle 8i數據庫中,我們經常會發現出現會Oracle運行操作的系統命令.就一般情況而言,利用Oracle Enterprise Manager來設定作業能達到我們想要的目的.但是由於OEM在設定作業缺乏靈活性,設定的作業的參數是固定的。

在實際應用當中往往需要在SQL語句當中運行需要隨時Oracle運行操作系統命令.Oracle 8i沒有直接運行OS命令的語句,我們可以利用DBMS_PIPE程序包實現這一要求.

DBMS_PIPE通過創建管道,可以讓至少兩個進程進行通信.Oracle的管道與操作系統的管道在概念上有相同的地方,但是在實現機制不同.
下面介紹實現具體步驟:

1 創建一個程序包,姑且起名叫DAEMON,SQL語句如下:

創建daemon程序包

  1. CREATE OR REPLACE PACKAGE BODY daemon AS  

execute_system是實現運行os命令的函數

  1. FUNCTION execute_system(command VARCHAR2,   
  2. timeout NUMBER DEFAULT 10)   
  3. RETURN NUMBER IS   
  4. status NUMBER;   
  5. result VARCHAR2(20);   
  6. command_code NUMBER;   
  7. pipe_name VARCHAR2(30);   
  8. BEGIN   
  9. pipe_name :DBMS_PIPE.UNIQUE_SESSION_NAME;   
  10. DBMS_PIPE.PACK_MESSAGE(''SYSTEM'');   
  11. DBMS_PIPE.PACK_MESSAGE(pipe_name);   
  12. DBMS_PIPE.PACK_MESSAGE(command);   

向daemon管道發送表示命令的字符

  1. status :DBMS_PIPE.SEND_MESSAGE(''daemon'', timeout);   
  2. IF status <> 0 THEN   
  3. RAISE_APPLICATION_ERROR(-20010,   
  4. ''Execute_system: Error while sending. Status = '' || status);   
  5. END IF;   
  6. status :DBMS_PIPE.RECEIVE_MESSAGE(pipe_name, timeout);   
  7. IF status <> 0 THEN   
  8. RAISE_APPLICATION_ERROR(-20011,   
  9. ''Execute_system: Error while receiving.   
  10. Status = '' || status);   
  11. END IF;   

獲取返回結果

  1. DBMS_PIPE.UNPACK_MESSAGE(result);   
  2. IF result <> ''done'' THEN   
  3. RAISE_APPLICATION_ERROR(-20012,   
  4. ''Execute_system: Done not received.'');   
  5. END IF;   
  6.  
  7. DBMS_PIPE.UNPACK_MESSAGE(command_code);   
  8. DBMS_OUTPUT.PUT_LINE(''System command executed. result = '' ||   
  9. command_code);   
  10. RETURN command_code;   
  11. END execute_system;   
  12. stop是讓daemon停止*/   
  13. PROCEDURE stop(timeout NUMBER DEFAULT 10) IS   
  14. status NUMBER;   
  15. BEGIN   
  16. DBMS_PIPE.PACK_MESSAGE(''STOP'');   
  17. status :DBMS_PIPE.SEND_MESSAGE(''daemon'', timeout);   
  18. IF status <> 0 THEN   
  19. RAISE_APPLICATION_ERROR(-20030,   
  20. ''stop: error while sending. status = '' || status);   
  21. END IF;   
  22. END stop;   
  23. END daemon;  

通過Sql*Plus運行以上語句,將為當前用戶創建daemon程序包. 以上的相關內容就是對在Oracle運行操作系統命令的創建一個程序包介紹,望你能有所收獲。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved