虚谷数据库提供定时作业机制,用于定时、定期、自动的进行某些操作,可通过系统包 dbms_scheduler 进行定时作业创建、调度、查看、删除等。
DBMS_SCHEDULER 系统包封装了以下过程/函数:ENABLE、DISABLE、SET_JOB_ARGUMENT_VALUE、DROP_JOB、RUN_JOB。
过程/函数含义如下:
DBMS_SCHEDULER.ENABLE(job_name):表示启用作业。 DBMS_SCHEDULER.DISABLE(job_name,TURE):表示禁用作业。 DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(job_name,param_order,param_val):表示对 job 调用存储过程进行参数赋值,param_order 为参数序,param_val 为参数值。 DBMS_SCHEDULER.RUN_JOB(job_name,TRUE):表示显式调用定时作业。 DBMS_SCHEDULER.DROP_JOB(job_name,TRUE):表示删除定时作业。
语法格式
- DBMS_SCHEDULER.CREATE_JOB (
- job_name IN VARCHAR2,
- job_type IN VARCHAR2,
- job_action IN VARCHAR2,
- number_of_arguments IN PLS_INTEGER DEFAULT 0,
- start_date IN TIMESTAMP DEFAULT NULL,
- repeat_interval IN VARCHAR2 DEFAULT NULL,
- end_date IN TIMESTAMP DEFAULT NULL,
- job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS',
- enabled IN BOOLEAN DEFAULT FALSE,
- auto_drop IN BOOLEAN DEFAULT TRUE,
- comments IN VARCHAR2 DEFAULT NULL);
参数解释:
参数说明:
示例1
基于存储过程的定时作业。
- CREATE TABLE JOB_TEST(ID INT,DT DATETIME);
-
- CREATE OR REPLACE PROCEDURE JOB_PROC1(INPUT INTEGER) IS
- BEGIN
- INSERT INTO JOB_TEST VALUES (INPUT, SYSDATE);
- END;
-
- EXEC dbms_scheduler.create_job(
- 'job1',
- 'stored_procedure',
- 'JOB_PROC1',
- 1,
- sysdate,
- 'freq=secondly;INTERVAL=30;byhour=5,14;',
- '2029-01-01 01:00:00',
- 'default_class',
- FALSE,
- TRUE,
- '这是一个测试');
示例2
基于PLSQL块语句的定时作业
- EXEC dbms_scheduler.create_job('job2',
- 'plsql_block',
- 'DECLARE BEGIN FOR i IN 1..10 LOOP INSERT INTO JOB_TEST VALUES(i,sysdate);END LOOP;END;',
- 0,
- sysdate,
- 'freq=secondly;INTERVAL=30;byhour=5,14;',
- '2029-01-01 01:00:00',
- 'default_class',
- FALSE,
- TRUE,
- '这是一个测试');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE该过程用于设置作业的参数信息。可通过位置绑定参数也可以通过参数名称绑定参数。
语法格式
- -- argument_value支持VARCHAR2、TINYINT、SMALLINT、INTEGER、BIGINT、FLOAT、DOUBLE、NUMERIC、BOOLEAN、TIME、DATE、DATETIME数据类型,此处语法仅列出VARCHAR2类型作为参考。
-
- DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
- job_name IN VARCHAR2,
- argument_position IN PLS_INTEGER,
- argument_value IN VARCHAR2);
-
- DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
- job_name IN VARCHAR2,
- argument_name IN VARCHAR2,
- argument_value IN VARCHAR2);
参数解释:
示例:
- SET_JOB_ARGUMENT_VALUE
- BEGIN
- DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
- job_name => 'job1',
- argument_name => 'INPUT',
- argument_value => 100
- );
- END;
- /
上面这个示例是使用 DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE 过程来更新名为 job1 的作业的参数 INPUT 的值为 100。
DBMS_SCHEDULER.SET_ATTRIBUTE 该存储过程用于修改定时作业属性值,而不是参数。如果你想修改作业的某些属性,例如作业的名称、作业的开始时间、作业的结束时间等,你可以使用SET_ATTRIBUTE。
语法格式如下:
- DBMS_SCHEDULER.SET_ATTRIBUTE (
- name IN VARCHAR2,
- attribute IN VARCHAR2,
- value IN {VARCHAR2 | TIMESTAMP | PLS_INTEGER | BOOLEAN});
参数解释:
示例:
- BEGIN
- DBMS_SCHEDULER.SET_ATTRIBUTE(
- name => 'job1',
- attribute => 'repeat_interval',
- value => 'freq=secondly;INTERVAL=15;byhour=5,14;'
- );
- END;
- /
-
在这个例子中,展示了如何使用 SET_ATTRIBUTE 来修改作业的间隔时间,我们将 job1 作业的重复间隔从原来的 30 秒修改为 15 秒,并且保持 byhour 属性为 5,14,这意味着作业将在每天的 5 点和 14 点执行。
RUN_JOB该存储过程用于显式调用作业
语法格式如下:
- DBMS_SCHEDULER.RUN_JOB (
- job_name IN VARCHAR2,
- use_current_session IN BOOLEAN DEFAULT TRUE);
参数解释:
示例:
- BEGIN
- DBMS_SCHEDULER.RUN_JOB(job_name => 'job1');
- END;
- /
DBMS_SCHEDULER.RUN_JOB 函数被调用来立即运行名为 job1 的作业。这个函数会立即触发作业的执行,即使作业的计划时间还没有到达。
ENABLE存储过程用于启用作业,将作业是否启用属性设置为true,然后作业根据其开始时间、结束时间和间隔时间自动运行作业。
DISABLE存储过程用于禁用作业同ENABLE作用相反。
语法格式如下:
- DBMS_SCHEDULER.ENABLE (
- name IN VARCHAR2);
-
- DBMS_SCHEDULER.DISABLE (
- name IN VARCHAR2,
- force IN BOOLEAN DEFAULT FALSE);
参数解释:
示例:
- --enable启用作业
- BEGIN
- DBMS_SCHEDULER.ENABLE(name => 'job1');
- END;
- /
-
- --disable禁用作业
- BEGIN
- DBMS_SCHEDULER.DISABLE(name => 'job1');
- END;
- /
在这两个例子中,name => 'job1' 参数指定了要启用或禁用的作业的名称。执行 DBMS_SCHEDULER.ENABLE 后,作业将开始按照其计划运行。执行 DBMS_SCHEDULER.DISABLE 后,作业将停止运行,直到再次被启用
DROP_JOB该存储过程用于删除作业。
语法格式如下:
- DBMS_SCHEDULER.DROP_JOB (
- job_name IN VARCHAR2,
- force IN BOOLEAN DEFAULT FALSE);
参数解释:
示例:
-
- BEGIN
- DBMS_SCHEDULER.DROP_JOB(job_name => 'job1');
- END;
- /
在这个例子中,job_name => 'job1' 参数指定了要删除的作业的名称。执行 DBMS_SCHEDULER.DROP_JOB 后,名为 job1 的作业将从数据库中被永久删除。