標籤:長度 運行 where 時間設定 proc objects object 就會 預存程序
首先預存程序是幹什麼的?job是幹什麼的?
預存程序:相當於一個複雜的sql,用來執行自訂的複雜的功能,建立了之後會存入一個表裡,可以通過job來執行預存程序,實現我們需要的功能
job:實際上就是資料庫內建的定時任務,可以設定預存程序什麼時間執行的這麼一種功能,是資料庫內建的,
==========================預存程序==========================預存程序可以通過以寫複雜sql的形式來實現自訂的特殊功能,由自己書寫定義,定義後存入內建的表裡定義格式:
create or replace procedure 名字(參數(可有可無))
as .....
begin
...........
end;
例子:
1:建立一個無參數的名為test_job的預存程序,作用是像表裡添加系統時間
create or replace procedure test_job
as
begin
insert into t_job values(sysdate);---向表裡添加資料
end;2:建立一個名為test_user的預存程序,具體設定圖下,紅字為解釋
create or replace procedure test_user(username1 in varchar2(25)) --參數為username1,in代表是輸入參數,參數的資料類型和長度
as vs_username VARCHAR2(4000); --as後面可以定義變數,定義的變數可以在下面自訂的sql中引用 ;
begin --自訂的sql功能開始
select username into vs_username from t_user where username=username1; --將表中查出的username欄位的值付給自訂的變數vs_username,into是oracle的一個關鍵字
DBMS_OUTPUT.PUT_LINE(vs_username);--將結果列印輸出
end; --自訂的sql功能結束
查看定義的預存程序:
select * from user_objects where object_type=‘PROCEDURE‘; -- 可以查看自訂的預存程序
=============================job===================================
job是oracle本身內建的一個功能,可以自訂job,指定什麼時候執行預存程序,定義好之後會存入內建的表裡,根據定義的時間來執行預存程序
定義的格式:
declare
job1 number; --指定名字
begin
dbms_job.submit(job1, ‘test_job;‘, sysdate, ‘sysdate+5/1440‘);--制定名字,要執行的預存程序,時間格式,具體的時間設定,這裡是每5分鐘執行一次預存程序
end;查看定義好的job:
select * from dba_jobs;--所有的job,管理使用者下的查詢
select * from user_jobs;--個人使用者下的查詢
select * from dba_jobs_running;--查詢正在啟動並執行job,這個有待確認
這樣定義好job之後,我們定義的預存程序就會根據定義的job定期執行。
====================小例子開始===============================
create table t_job(a date);--建立表
--建立預存程序
create or replace procedure test_job
as
begin
insert into t_job values(sysdate);---向表裡添加資料
end;
--定義job
declare
job1 number;
begin
dbms_job.submit(job1, ‘test_job;‘, sysdate, ‘sysdate+5/1440‘);--每5分鐘執行一次,定義完後job就是啟動並執行
end;
select * from t_job; ---可以每隔5分鐘查看一次表裡看看有沒有增加資料
====================小例子結束===============================
下面是對job的一些操作
--=============停止job==============
begin
dbms_job.broken(25,false);--true == y =停止,false ==N =執行
end;
/
--===============刪除job=============
begin
dbms_job.remove(24);
end;
/
--================更改job時間========
begin
dbms_job.Interval(25, ‘sysdate+5/1440‘);--更改指定job的時間設定
end;
/
這裡唯寫了broken/remove/Interval三個方法
更多方法和job表結構請看:http://www.cnblogs.com/xueershewang/p/7354936.html
時間的設定請看:http://www.cnblogs.com/xueershewang/p/7355286.html
oracle預存程序與job