首先存儲過程是干什么的?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