當前位置:首頁 » 存儲配置 » oracle定時存儲過程

oracle定時存儲過程

發布時間: 2022-09-11 15:58:25

A. 如何讓oracle job定時調用一個有參的存儲過程

/*
查詢:
select job,broken,what,interval,t.* from user_jobs t;
job job的唯一標識,自動生成的
broken 是否處於運行狀態,N;運行;Y:停止
what 存儲過程名稱
next_date 初次執行時間
interval 執行周期

刪除:
begin dbms_job.remove(jobno); end;
根據what的內容確定其對應的job,並如此執行刪除

執行時間例子:
描述 INTERVAL參數值
每天午夜12點 ''TRUNC(SYSDATE + 1)''
每天早上8點30分 ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''
每星期二中午12點 ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''
每個月第一天的午夜12點 ''TRUNC(LAST_DAY(SYSDATE ) + 1)''
每個季度最後一天的晚上11點 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''
每星期六和日早上6點10分 ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''
每3秒鍾執行一次 'sysdate+3/(24*60*60)'
每2分鍾執行一次 'sysdate+2/(24*60)'

1:每分鍾執行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60) --每分鍾執行
interval => 'sysdate+1/(24*60)' --每分鍾執行
interval => 'sysdate+1' --每天
interval => 'sysdate+1/24' --每小時
interval => 'sysdate+2/24*60' --每2分鍾
interval => 'sysdate+30/24*60*60' --每30秒
2:每天定時執行
Interval => TRUNC(sysdate+1) --每天凌晨0點執行
Interval => TRUNC(sysdate+1)+1/24 --每天凌晨1點執行
Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60) --每天早上8點30分執行
3:每周定時執行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24 --每周一凌晨1點執行
Interval => TRUNC(next_day(sysdate,1))+2/24 --每周一凌晨2點執行
4:每月定時執行
Interval =>TTRUNC(LAST_DAY(SYSDATE)+1) --每月1日凌晨0點執行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24 --每月1日凌晨1點執行
5:每季度定時執行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') --每季度的第一天凌晨0點執行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24 --每季度的第一天凌晨1點執行
Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24 --每季度的最後一天的晚上11點執行
6:每半年定時執行
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24 --每年7月1日和1月1日凌晨1點
7:每年定時執行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24 --每年1月1日凌晨1點執行

相關方法:
修改要執行的操作:dbms_job.what(jobno,'sp_fact_charge_code;'); --修改某個job名
修改下次執行時間:dbms_job.next_date(job,next_date);
修改間隔時間:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);

B. 怎樣實現每天自動執行oracle的存儲過程一次

用job
oracle定時器調用存儲過程

1、創建一個表,為了能清楚看到定時器的運行情況我們創建一個帶有日期欄位的表
sql代碼
create table job_table(run_time date);
create table job_table(run_time date);

2、創建存儲過程
Sql代碼
create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;
create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;

3、創建job,並且指定為一分鍾執行一次
Sql代碼
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
4.創建之後自動處於運行狀態,我們查詢job表,看看我們創建的job
Sql代碼
select job,broken,what,interval,t.* from user_jobs t;
select job,broken,what,interval,t.* from user_jobs t;
job broken what interval ...
81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...

C. oracle 定時存儲過程

一般都不喜歡回答你這樣提問的問題。1、格式問題,沒有人有那麼的時間慢慢看你的文字。2、提問題你要把你的問題重點提出,而不是把所有的事情推給別人。比如你正在做,做到一半不會了,不知道該怎麼辦,那麼你可提問一下看看別人有辦法沒。這樣對自己的能力和認知度有一定的提高。

以上乃個人建議,望請海涵。

D. 怎樣實現每天自動執行oracle的存儲過程一次

用job
oracle定時器調用存儲過程
1.創建一個表,為了能清楚看到定時器的運行情況我們創建一個帶有日期欄位的表
Sql代碼
create table job_table(run_time date);

create table job_table(run_time date);
2.創建存儲過程
Sql代碼
create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;

create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;
3.創建job,並且指定為一分鍾執行一次
Sql代碼
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;

declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
4.創建之後自動處於運行狀態,我們查詢job表,看看我們創建的job
Sql代碼
select job,broken,what,interval,t.* from user_jobs t;

select job,broken,what,interval,t.* from user_jobs t;
job broken what interval ...
81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...

參數介紹
job job的唯一標識,自動生成的
broken 是否處於運行狀態,N;運行;Y:停止
what 存儲過程名稱
interval 定義的執行時間

補充:
描述 INTERVAL參數值
每天午夜12點 ''TRUNC(SYSDATE + 1)''
每天早上8點30分 ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''
每星期二中午12點 ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''
每個月第一天的午夜12點 ''TRUNC(LAST_DAY(SYSDATE ) + 1)''
每個季度最後一天的晚上11點 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''
每星期六和日早上6點10分 ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''

E. 想請教一下如何用oracle 中JOB實現定時存儲過程。

如果是10g的話就用scheler來代替job吧,比job穩定多了。

先解釋一下基礎概念,scheler 包含了以下幾個實體對象
Program -- 提供了scheler 將要運行什麼,包含program name,program type(PLSQL塊、存儲過程、外部程序),program action(具體的程序實體,比如說一個PLSQL塊、或者是存儲過程的名稱、或者是外部程序的路徑加名稱) 。

Scheles -- 指定何時何種頻率來運行job,可以被不同的job重復的利用。比如說我有兩個job都要求在每天的凌晨4點運行,那麼兩個job可以同時指定相同的schele。

Jobs -- 具體的作業的名稱,依賴於那個program、schele。也可以不指定program、schele,而直接寫入program、schele的相應參數。

Chains -- 把一組program像一個單獨的實體連接在一起,作為一個對象。Job可以指向Chains代替單一的program 。這樣就能完成類似如下功能:運行A,然後運行B,當A、B都運行成功則運行C,否則運行D。

下面參考文檔邊看邊做。

1.創建一張表 create table scheler_test(id number,instime date);

2.創建一個存儲過程,實現往表中插入資料。

create or replace procere p_insSysdate as
id number;
begin
select count(*) into id from scheler_test;
insert into scheler_test values(id,sysdate);
commit;
end;
/
3.創建一個schele,這個僅僅是一個時間上的安排,由DBMS_SCHEDULER.CREATE_JOB調用。這樣就可以重用schele,並且schele在時間的安排上強大與原先的JOB 。語法如下:

BEGIN
SYS.DBMS_SCHEDULER.CREATE_SCHEDULE
(
schele_name => 'SCOTT.EVERY_MINUTE'
,start_date => NULL
,repeat_interval => 'FREQ=MINUTELY'
,end_date => NULL
,comments => NULL
);
END;
/

以下給出部分repeat_interval的寫法實例,以供參考
EVERY DAY 'FREQ=DAILY;INTERVAL=1'
EVERY MINUTE 'FREQ=MINUTELY;INTERVAL=1'
EVERY 4 HOURS ON THE HOUR 'FREQ=HOURLY;INTERVAL=4;BYMINUTE=0;BYSECOND=0'
1st DAY OF EVERY MONTH 'FREQ=DAILY;BYMONTHDAY=1'
WEEKDAYS AT 7am and 3pm 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=7,15; BYMINUTE=0;BYSECOND=0'

4.創建DBMS_SCHEDULER.CREATE_PROGRAM,指定運行什麼樣的程序。

BEGIN
SYS.DBMS_SCHEDULER.CREATE_PROGRAM
(
program_name => 'SCOTT.PRG_INSSYSDATE'
,program_type => 'STORED_PROCEDURE'
,program_action => 'p_insSysdate'
,number_of_arguments => 0
,enabled => TRUE
,comments => NULL
);
END;
/

F. oracle中怎麼讓帶有輸入參數的存儲過程定時執行

兩種方法
1。oracle中有 [作業] 功能,創建一個作業,然後,設置定時執行。
2。用系統的[定時任務],定一個時間,然後調用bat文件,從bat中調用oracle的存儲過程。

G. oracle 創建定時任務執行存儲過程

可以用圖形化界面來創建JOB,如圖:在PL/SQL的項目DBMS_JOBS中進行新建。

填寫好上面標紅的地方後,點擊應用即可生成計劃!

H. oracle定時執行怎麼執行多個存儲過程

定時執行存儲過程,需要在job里定義;而執行多個存儲過程,則在job中定義多次即可。

運行環境:oracle 10g

1、定義其中一個job

declare
jobnonumber;
begin
dbms_job.submit(11,
what=>'pro_bdc_bh(
to_char(add_months(trunc(sysdate),-1),''yyyy''),
to_char(add_months(trunc(sysdate),-1),''MM''),
''true''
);',
next_date=>sysdate,
Interval=>'TRUNC(sysdate)+1+2/(24)');
commit;
end;

注意:其中pro_bdc_bh為存儲過程名稱,TRUNC(sysdate) + 1 +2 / (24)為定義的運行時間為每日凌晨2點。

2、然後定義另外一個job

declare
jobnonumber;
begin
dbms_job.submit(11,
what=>'p_test(
to_char(add_months(trunc(sysdate),-1),''yyyy''),
to_char(add_months(trunc(sysdate),-1),''MM''),
''true''
);',
next_date=>sysdate,
Interval=>'TRUNC(sysdate)+1+2/(24)');
commit;
end;

注意:這次運行的存儲過程名為p_test,運行時間同樣為每日凌晨2點。

3、創建job完成後,可通過具有創建job的賬號查詢創建是否成功,語句如下:

select*fromuser_jobs;

I. 怎樣實現每天自動執行oracle的存儲過程一次

用job
oracle定時器調用存儲過程
1.創建一個表,為了能清楚看到定時器的運行情況我們創建一個帶有日期欄位的表
Sql代碼
create table job_table(run_time date);

create table job_table(run_time date);
2.創建存儲過程
Sql代碼
create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;

create or replace procere job_proc is
begin
insert into job_table (run_time) values (sysdate);
end;
3.創建job,並且指定為一分鍾執行一次
Sql代碼
declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;

declare
job number;
begin
dbms_job.submit(job, 'job_proc;', sysdate, 'TRUNC(sysdate,''mi'') + 1 / (24*60)');
end/
commit;
4.創建之後自動處於運行狀態,我們查詢job表,看看我們創建的job
Sql代碼
select job,broken,what,interval,t.* from user_jobs t;

select job,broken,what,interval,t.* from user_jobs t;
job broken what interval ...
81 N job_proc; TRUNC(sysdate,'mi') + 1 / (24*60) ...

參數介紹
job job的唯一標識,自動生成的
broken 是否處於運行狀態,N;運行;Y:停止
what 存儲過程名稱
interval 定義的執行時間

補充:
描述 INTERVAL參數值
每天午夜12點''TRUNC(SYSDATE + 1)''
每天早上8點30分 ''TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)''
每星期二中午12點 ''NEXT_DAY(TRUNC(SYSDATE ), ''''TUESDAY'''' ) + 12/24''
每個月第一天的午夜12點''TRUNC(LAST_DAY(SYSDATE ) + 1)''
每個季度最後一天的晚上11點 ''TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ''Q'' ) -1/24''
每星期六和日早上6點10分 ''TRUNC(LEAST(NEXT_DAY(SYSDATE, ''''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)''

J. Oracle存儲過程中的定時執行方法有哪些

定時執行在linux中有個叫crontag,用於設置周期性被執行的指令。這個不是oracle系統裡面的命令,而是linux或Unix系統裡面的命令。你可以在linux系統裡面定時登陸oracle然後執行你要制定的存儲過程。

熱點內容
如何查看別人的wifi密碼 發布:2025-03-13 08:53:00 瀏覽:777
伺服器裝機地址 發布:2025-03-13 08:47:28 瀏覽:117
一個中學的配置是什麼 發布:2025-03-13 08:46:29 瀏覽:120
phpmysql編譯pdo 發布:2025-03-13 08:46:25 瀏覽:844
sql調優工具 發布:2025-03-13 08:41:32 瀏覽:76
安卓手機雲控是什麼 發布:2025-03-13 08:28:42 瀏覽:627
vivoz6手機存儲設備在哪裡 發布:2025-03-13 08:08:36 瀏覽:60
emc存儲模擬器下載 發布:2025-03-13 08:06:54 瀏覽:760
粒子群演算法流程 發布:2025-03-13 08:04:44 瀏覽:292
pythonjsonkey 發布:2025-03-13 08:04:32 瀏覽:623