oracle存儲過程與job


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM