當前位置:首頁 » 存儲配置 » 如何定時執行存儲過程

如何定時執行存儲過程

發布時間: 2025-07-13 09:36:53

『壹』 mysql怎麼讓一個存儲過程定時執行

mysql怎麼讓一個存儲過程定時執行
查看event是否開啟: show variables like '%sche%';
將事件計劃開啟: set global event_scheler=1;
關閉事件任務: alter event e_test ON COMPLETION PRESERVE DISABLE;
開戶事件任務: alter event e_test ON COMPLETION PRESERVE ENABLE;

簡單實例.
創建表 CREATE TABLE test(endtime DATETIME);

創建存儲過程test
CREATE PROCEDURE test ()
BEGIN
update examinfo SET endtime = now() WHERE id = 14;
END;

創建event e_test
CREATE EVENT if not exists e_test
on schele every 30 second
on completion preserve
do call test();

每隔30秒將執行存儲過程test,將當前時間更新到examinfo表中id=14的記錄的endtime欄位中去

1) 首先來看一個簡單的例子來演示每秒插入一條記錄到數據表

USE test;
CREATE TABLE aaa (timeline TIMESTAMP);
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 1 SECOND
DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);
等待3秒鍾後,再執行查詢看看:

mysql> SELECT * FROM aaa;
+---------------------+
| timeline |
+---------------------+
| 2007-07-18 20:44:26 |
| 2007-07-18 20:44:27 |
| 2007-07-18 20:44:28 |
+---------------------+
2) 5天後清空test表:

CREATE EVENT e_test
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
3) 2007年7月20日12點整清空test表:

CREATE EVENT e_test
ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'
DO TRUNCATE TABLE test.aaa;
4) 每天定時清空test表:

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
DO TRUNCATE TABLE test.aaa;
5) 5天後開啟每天定時清空test表:

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
6) 每天定時清空test表,5天後停止執行:

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY
DO TRUNCATE TABLE test.aaa;
7) 5天後開啟每天定時清空test表,一個月後停止執行:

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY
ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO TRUNCATE TABLE test.aaa;
[ON COMPLETION [NOT] PRESERVE]可以設置這個事件是執行一次還是持久執行,默認為NOT PRESERVE。
8) 每天定時清空test表(只執行一次,任務完成後就終止該事件):

CREATE EVENT e_test
ON SCHEDULE EVERY 1 DAY
ON COMPLETION NOT PRESERVE
DO TRUNCATE TABLE test.aaa;
[ENABLE | DISABLE]可是設置該事件創建後狀態是否開啟或關閉,默認為ENABLE。
[COMMENT 『comment』]可以給該事件加上注釋。

三、修改事件(ALTER EVENT)
ALTER EVENT event_name
[ON SCHEDULE schele]
[RENAME TO new_event_name]
[ON COMPLETION [NOT] PRESERVE]
[COMMENT 'comment']
[ENABLE | DISABLE]
[DO sql_statement]
1) 臨時關閉事件

ALTER EVENT e_test DISABLE;
2) 開啟事件

ALTER EVENT e_test ENABLE;
3) 將每天清空test表改為5天清空一次:

ALTER EVENT e_test
ON SCHEDULE EVERY 5 DAY;
四、刪除事件(DROP EVENT)
語 法很簡單,如下所示:

DROP EVENT [IF EXISTS] event_name
例如刪除前面創建的e_test事件

DROP EVENT e_test;
當然前提是這個事件存在,否則會產生ERROR 1513 (HY000): Unknown event錯誤,因此最好加上IF EXISTS

DROP EVENT IF EXISTS e_test;

create event test
ON SCHEDULE AT '2007-09-01 12:00:00' + INTERVAL 1 DAY
on completion not preserve
do insert into yyy values('hhh','uuu');

解釋:從2007-09-01開始,每天對表yyy在12:00:00進行一個插入操作。而且只執行一次(on completion not preserve )

我的計劃任務為:

create event sysplan
ON SCHEDULE AT '2010-05-22 23:00:00' + INTERVAL 1 DAY
on completion not preserve
do truncate table bjproj.ae_tmp;

三、通過設定全局變數event_scheler 的值即可動態的控制事件調度器是否啟用。
查看是否event_scheler開啟mysql> SHOW VARIABLES LIKE '%event%';
設置開啟mysql> SET GLOBAL event_scheler=ON;
四、例子:

分鍾插入一條日誌:DELIMITER //CREATE EVENT `user_log_event` ON SCHEDULE EVERY 1
MINUTE STARTS '2010-12-27 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO
BEGIN INSERT INTO log SET addtime=NOW();END//
調用存儲過程:DELIMITER
//CREATE EVENT `user_log_event` ON SCHEDULE EVERY 1 DAY STARTS
'2010-00-00 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
CALL user_log_prov();END//

『貳』 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;

『叄』 oracle 添加一個計劃任務 每天凌晨兩點 定時執行一個存儲過程 求詳細步驟!!急!!

在你的存儲過程裡面定義一個變數:
v_HH24 CHAR(2) := '00';

begin後面給變數賦值:
v_HH24 := to_char(sysdate, 'HH24');

然後在你執行的代碼外羨友核面加上:
IF v_HH24 = '02'兄掘 THEN

你的代碼;
end if;
然告游後使用下面的腳本創建job:

begin
sys.dbms_job.submit(job => :job,
what => '你的存儲過程名字;',
next_date => to_date('01-06-2013 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
interval => 'SYSDATE+60/1440');
commit;
end;
/

『肆』 MSSQL資料庫中定時存儲的存儲過程

您好!要實現你要的功能;操作如下:
一、可以先寫好存儲過程的內容;放在目標資料庫中
二、在MSSQL的SQL server代理——〉作業——〉新建一個作業 在[常規]選項卡中 設置 名稱AUTOZY——〉在[步驟]選項卡中 點擊[新建作業]
三、在彈出的作業步驟窗口中;填寫步聚名稱(自己取一個)--運行身份選擇SA或者WINDOWS運行都可以---在資料庫處選擇 目標資料庫(這步很關鍵)---
在命令 處 寫 exec 存儲過程的名稱(這個不要寫錯)---點擊[確定] 返回上級窗口
四、選擇[計劃]選項卡 --在計劃窗口中可以具體設置怎麼樣定時運行的方案
五、設置好後 [確定]返回上級窗口---再點擊[確定]保存了這個作業
如有不明之處;歡迎CALL 我

『伍』 怎樣讓sqlserver後台定時執行某個存儲過程

SQL代理中添加工作計劃(job)

『陸』 各位大蝦,job定時問題: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;
/

熱點內容
瀏覽器源碼下載 發布:2025-07-13 19:45:26 瀏覽:262
大眾車的配置有哪些 發布:2025-07-13 19:39:54 瀏覽:294
通達信k線公式源碼 發布:2025-07-13 19:33:53 瀏覽:835
老式轉盤密碼箱怎麼開 發布:2025-07-13 19:32:44 瀏覽:74
少兒編程平板 發布:2025-07-13 19:32:43 瀏覽:879
集成編譯環境是什麼 發布:2025-07-13 19:30:27 瀏覽:688
php判斷字元是否相等 發布:2025-07-13 19:17:21 瀏覽:614
電腦直播唱歌電腦需要什麼配置 發布:2025-07-13 19:03:45 瀏覽:88
config連接資料庫 發布:2025-07-13 19:02:24 瀏覽:953
bt文件解壓 發布:2025-07-13 19:02:16 瀏覽:744