Oracle 提供了 DBMS_SCHEDULER 包来管理定时任务,可以用来定期执行 SQL 语句或 PL/SQL 块
1. 创建表
CREATE TABLE EXAMPLE_TABLE (
ID NUMBER PRIMARY KEY,
DATA VARCHAR2(100),
CREATE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 创建任务
BEGIN
DBMS_SCHEDULER.create_job (
job_name => 'delete_example_table_data', -- job名称
job_type => 'PLSQL_BLOCK', -- 指定作业类型为PL/SQL代码块
job_action => 'BEGIN DELETE FROM EXAMPLE_TABLE WHERE CREATE_TIME < CURRENT_TIMESTAMP -7; END;', -- 要执行的PL/SQL代码
start_date => SYSTIMESTAMP, -- 开始时间
repeat_interval => 'FREQ=DAILY; BYHOUR=0; BYMINUTE=0; BYSECOND=0', -- 重复周期为每天0点0分0秒 ,'FREQ=Minutely;Interval=5' 每隔5分钟执行一次
enabled => TRUE -- 创建后立即启用作业
);
END;
3. 查看任务
SELECT * FROM user_scheduler_jobs;
4. 删除任务
BEGIN
DBMS_SCHEDULER.drop_job (
job_name => 'delete_example_table_data',
force => TRUE -- 强制删除一个可能正在运行的任务
);
END;
- 禁用任务
BEGIN
DBMS_SCHEDULER.DISABLE('delete_example_table_data');
END;