您好,登錄后才能下訂單哦!
小編給大家分享一下ORACLE中如何使用Programs,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Scheduler 中的Program對象并不是常規意義上的"程序"或"應用",而就是一個"對象",由DBA定義的,具有執行某項功能的特殊對象。Program中實際執行的操作可以分為下列三種類型:
PL/SQL BLOCK :標準的pl/sql代碼塊;
STORED PROCEDURE :編譯好的PL/SQL存儲過程,或者Java存儲過程,以及外部的c子程序;
EXECUTEABLE :ORACLE數據庫之外的應用,比如操作系統命令等等。
創建Programs使用DBMS_SCHEDULER.CREATE_PROGRAM過程,該過程支持的參數如下:
JSSWEB> desc dbms_scheduler.create_program;
Parameter Type Mode Default?
------------------- -------------- ---- --------
PROGRAM_NAME VARCHAR2 IN
PROGRAM_TYPE VARCHAR2 IN
PROGRAM_ACTION VARCHAR2 IN
NUMBER_OF_ARGUMENTS BINARY_INTEGER IN Y
ENABLED BOOLEAN IN Y
OMMENTS VARCHAR2 IN Y
如上所示,前三項為必選參數,各參數實際代表的意義如下:
PROGRAM_NAME :指定一個program名稱;
PROGRAM_TYPE :Program的類型,如前文中所述,Program支持三種類型;
PROGRAM_ACTION :實際執行的操作,應與前面PROGRAM_TYPE參數關聯使用。比如說前面指定了PROGRAM_TYPE為"PLSQL_BLOCK",那么此處要執行的action就應當是一段標準的pl/sql代碼。如果前面指定PROGRAM_TYPE為"STORED_PROCEDURE",那么此處要執行的action就應當是ORACLE中定義好的存儲過程(含Java存儲過程),如果前面指定PROGRAM_TYPE為"EXECUTABLE",那么此處就應該指定外部命令的命令行信息(含路徑信息);
NUMBER_OF_ARGUMENTS :指定支持的參數個數,默認值為0即沒有參數。每個program最多能夠支持255個參數,注意如果PROGRAM_TYPE設置為PLSQL_BLOCK,那么本參數自動忽略;
ENABLED :指定是否將創建的program置為有效狀態,默認情況下為false。
COMMENTS :這個不用再說了吧,注釋信息。
下面實際操作一下看看,PL/SQL或PROCEDURE沒有挑戰(ORACLE中直接即可調用),咱們創建一下program,直接調用操作系統中的ls命令,操作如下:
SQL> BEGIN
2 DBMS_SCHEDULER.CREATE_PROGRAM (
3 program_name => 'my_program1',
4 program_action => '/bin/date',
5 program_type => 'EXECUTABLE',
6 enabled => TRUE);
7 END;
8 /
PL/SQL procedure successfully completed.
定義的program如何執行,這里先賣個關子,前面介紹CREATE_PROGRAM過程的參數時提到,每個program最多支持255個參數,要為program添加參數,可以通過DEFINE_PROGRAM_ARGUMENT過程。不過在為其添加參數前,要注意program的NUMBER_OF_ARGUMENTS指定的數量,如果該值為0,那么為其添加參數時就會報錯。
查詢創建的program的信息,可以通過USER_SCHEDULER_PROGRAMS視圖,例如:
SQL> select program_name,program_type,program_action,number_of_arguments,enabled from user_scheduler_programs;
PROGRAM_NAME PROGRAM_TYPE PROGRAM_ACTION NUMBER_OF_ARGUMENTS ENABL
-------------------- ---------------- -------------------- ------------------- -----
MY_PROGRAM1 EXECUTABLE /bin/ls 1 FALSE
由于前面創建program時並未指定NUMBER_OF_ARGUMENTS的值,因此我們這里需要首先修改該值為一個非0值,操作如下:
SQL> exec dbms_scheduler.set_attribute('my_program1','NUMBER_OF_ARGUMENTS',1);
PL/SQL procedure successfully completed.
沒錯,操作還是使用DBMS_SCHEDULER.SET_ATTRIBUTE過程。另外需要注意,program的NUMBER_OF_ARGUMENTS參數可是說想改就能改的,正常情況下該處理必須是在program處于enabled之前確認完畢,否則會觸發ORA-27465錯誤,因此要修改program的參數之前,必須首先確保要修改program的enabled狀態為false。
那么對于已經處于enabled狀態的program,如何修改其狀態屬性呢?其實很簡單,前面操作jobs時使用的DBMS_SCHEDULER.DISABLE過程還記的嗎?沒錯,該過程對于program同樣好使,并且調用方式也完全一樣,例如:
SQL> exec dbms_scheduler.disable('my_program1');
PL/SQL procedure successfully completed.
另外,如果希望將program置為enabled狀態,執行DBMS_SCHEDULER.ENABLE過程即可,這里不再例舉。
接下來,就可以為剛剛創建的my_program1添加路徑參數,操作如下:
SQL> BEGIN
2 DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT (
3 program_name => 'my_program1',
4 argument_position => 1,
5 argument_name => 'dirpath',
6 argument_type => 'VARCHAR2',
7 default_value => '/home/oracle');
8 END;
9 /
PL/SQL procedure successfully completed.
查詢為program定義的參數,可以通過USER_SCHEDULER_PROGRAM_ARGS視圖,例如:
SQL> select program_name,argument_name,argument_position,argument_type, default_value from user_scheduler_program_args;
PROGRAM_NAME ARGUMENT_NAME ARGUMENT_POSITION DEFAULT_VALUE
-------------------- -------------------- ----------------- --------------------
MY_PROGRAM1 DIRPATH 1 VARCHAR2
刪除program的argument操作也很簡單,使用DROP_PROGRAM_ARGUMENT過程即可,例如:
SQL> exec dbms_scheduler.drop_program_argument('my_program1','dirpath');
PL/SQL procedure successfully completed.
該過程第一個參數指定program名稱,第二個參數指定定義的argument名稱,當然此處也可以指定argument的位置,即前例視圖返回結果中的 ARGUMENT_POSITION 列值。
要刪除program的話就更簡單了,使用DROP_PROGRAM過程即可,例如:
SQL> exec dbms_scheduler.drop_program('my_program1');
PL/SQL procedure successfully completed.
當然啦,刪除program的同時,也會刪除該program對應的所有arguments。
實際上SCHEDULER中創建job時,也可以指定執行外部的程序。SCHEDULER中的Job更像是之前版本繼承過來的JOBS,只不過10g中SCHEDULER管理的JOBS功能更加強大。Programs與Jobs不同的是,Jobs是定義好的,定時執行的任務,而Programs則是定義好的,等待被執行的對象。
以上是“ORACLE中如何使用Programs”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。