首批通过分布式安全可靠测评,为关键业务系统打造
CREATE_JOB
更新时间:2026-04-28 17:27:01
CREATE_JOB 过程用于创建一个作业。
如果通过将 enabled 属性设置为 TRUE,则 Scheduler 会根据其计划自动运行作业。如果创建的作业处于禁用状态,则只有通过使用 SET_ATTRIBUTE 过程启用该作业,该作业才会运行。
功能适用性
该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持。
语法
不使用现有程序或计划创建作业的语法
DBMS_SCHEDULER.CREATE_JOB (
job_name IN VARCHAR2,
job_type IN VARCHAR2,
job_action IN VARCHAR2,
number_of_argument IN BINARY_INTEGER DEFAULT 0,
start_date IN TIMESTAMP_UNCONSTRAINED DEFAULT NULL,
repeat_interval IN VARCHAR2 DEFAULT 'null',
end_date IN TIMESTAMP_UNCONSTRAINED 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',
credential_name IN VARCHAR2 DEFAULT 'null',
destination_name IN VARCHAR2 DEFAULT 'null',
max_run_duration IN BINARY_INTEGER DEFAULT 0);
使用已命名程序对象和内部计划创建作业的语法
DBMS_SCHEDULER.CREATE_JOB (
job_name IN VARCHAR2,
program_name IN VARCHAR2,
start_date IN TIMESTAMP_UNCONSTRAINED DEFAULT NULL,
repeat_interval IN VARCHAR2 DEFAULT 'null',
end_date IN TIMESTAMP_UNCONSTRAINED 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',
job_style IN VARCHAR2 DEFAULT 'REGULER',
credential_name IN VARCHAR2 DEFAULT 'null',
destination_name IN VARCHAR2 DEFAULT 'null',
max_run_duration IN BINARY_INTEGER DEFAULT 0);
参数说明
| 参数 | 说明 |
|---|---|
| job_name | 指定作业的名称。该名称在 SQL 命名空间中必须是唯一的。如果正在创建的作业属于另一个 Schema,则必须使用 Schema 名称对其进行限定。如果未指定作业名称,则会报错。也可以使用 GENERATE_JOB_NAME 由 Scheduler 生成名称,该名称是通过序列生成的数字,可以将字符串作为数字的前缀,则作业名称将是带有序列号的字符串,然后用于 CREATE_JOB 过程。 |
| job_type | 指定要创建的作业的类型。如果未指定,则会生成错误。当前版本仅支持 STORED_PROCEDURE。该参数只支持过程,不支持带有返回值的函数。 |
| job_action | 指定作业的操作。如果没有为内联程序指定 job_action,则在创建作业时会报错。job_action 在自治事务内执行,并遵从于所有自治事务准则和限制。对于存储过程,job_action 是存储过程的名称。如果过程位于作业之外的另一个 Schema 中,则必须指定 Schema。如果需要区分大小写,请将 Schema 名称和存储过程名称用双引号括起来。例如 job_action_proc=>'"Schema"."myProc "'。当作业或程序的类型为 STORED_PROCEDURE 时,job_action 不支持带有 INOUT 或 OUT 参数的 PL 过程。 |
| number_of_argument | 指定作业所需的参数数量。该参数的取值范围为 [0,255],默认值为 0。 |
| program_name | 与此作业关联的程序的名称。 |
| start_date | 指定此作业计划首次执行的日期和时间。如果 start_date 和 repeat_interval 为空,那么该作业一旦启用就会运行。 |
| repeat_interval | 指定作业重复的频率。可以使用日历表达式或 PL 表达式指定重复间隔。通过对指定的表达式求值,来确定作业下次运行的时间。 说明 该参数设置空会报错,但不影响功能使用。 |
| end_date | 指定作业过期时间,即不再运行的日期和时间。在 end_date 之后,如果 auto_drop 为 TRUE,则作业将被删除。如果 auto_drop 为 FALSE,则作业被禁用,而且作业的 STATE 设置为 COMPLETED。如果未指定 end_date 的值,则作业将被一直重复执行,除非设置了 max_runs 或者 max_failures,在这种情况下,当达到其中任一值时,作业将停止运行。end_date 的值必须在 start_date 的值之后,否则会报错。如果 end_date 的值与 start_date 的值相同,则作业不会被执行,也不会报错。 |
| job_class | 与此作业相关联的类。 |
| enabled | 指定是否启用创建的作业。该属性可以设置为 TRUE 或者 FALSE,默认为 FALSE,即创建的作业将被禁用。对于已禁用的作业,虽然已捕获该作业的相关元数据,并且该作业也属于数据库对象,但是,Scheduler 会忽略该作业,也不会处理该作业。如果想处理该作业,可以通过将此参数设置为 TRUE 或使用 ENABLE 过程来启用作业。 |
| auto_drop | 指定作业在完成或自动禁用后是否自动删除。该属性可以设置为 TRUE 或者 FALSE,如果设置为 TRUE,则会导致作业在完成或自动禁用后自动删除。如果出现以下情况,则认为已完成作业:
max_failures 次时,将被禁用。max_failures 也使用 SET_ATTRIBUTE 设置。如果 auto_drop 设置为 FALSE,则不会删除作业,并保留其元数据,直到使用 DROP_JOB 过程显式删除作业。默认情况下,创建作业时将 auto_drop 设置为 TRUE。 |
| comments | 添加作业的注释。默认情况下,该属性为 NULL。 |
| job_style | 指定正在创建的作业的样式。此属性可能的取值如下:
|
| credential_name | 指定与作业一起使用的默认凭据。对于本地数据库作业,它的值必须为 NULL。仅对于本地外部作业,如果此属性为 NULL(默认),则选择首选(默认)凭据。 |
| destination_name | 指定作业的数据库目标或外部目标。如果 CREATE_JOB 的 credential_name 参数为 NULL,则每个目的地前面必须有一个凭据,格式如下: sql credential.destination。 |
| max_run_duration | 指定作业允许运行的最长时间,单位为秒(s)。缺省值为 0,不指定时表示使用默认值。当取值为 0 时,实际按 30 秒生效。 |
使用说明
默认情况下,用户所创建的作业是被禁用的,必须显示启用作业,以便可以按照计划运行作业。
如果要将作业与指定类或程序相关联,需要具有该类或程序的 EXECUTE 权限。
并不是所有可能的作业属性都可以用 CREATE_JOB 设置,一些参数必须在创建作业后设置。例如 job_priority 和 max_runs 等参数需要通过 SET_ATTRIBUTE 过程进行设置。
示例
DECLARE
i INTEGER;
BEGIN
SELECT COUNT(*) INTO i FROM user_tables WHERE table_name = 'DBMS_SCHEDULER_T1';
IF i = 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE DBMS_SCHEDULER_T1(col DATE)';
END IF;
SELECT COUNT(*) INTO i FROM user_tables WHERE table_name = 'DBMS_SCHEDULER_T2';
IF i = 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE DBMS_SCHEDULER_T2(col DATE, job VARCHAR(128), job_name VARCHAR(128))';
END IF;
END;
/
CREATE OR REPLACE PACKAGE JOB_UTILS IS
PROCEDURE insert_date;
PROCEDURE insert_date_program ( job IN VARCHAR2, job_name IN VARCHAR2);
END;
/
CREATE OR REPLACE PACKAGE BODY JOB_UTILS IS
PROCEDURE insert_date IS
BEGIN
INSERT INTO DBMS_SCHEDULER_T1 VALUES(TO_CHAR(sysdate));
COMMIT;
END;
PROCEDURE insert_date_program ( job IN VARCHAR2, job_name IN VARCHAR2) IS
BEGIN
INSERT INTO DBMS_SCHEDULER_T2 VALUES(sysdate, job, job_name);
COMMIT;
END;
END;
/
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => dbms_scheduler.generate_job_name,
job_type => 'STORED_PROCEDURE',
job_action => 'JOB_UTILS.insert_date',
number_of_argument => 5,
start_date => sysdate ,
repeat_interval => 'FREQ=SECONDLY; INTERVAL=8',
end_date =>sysdate + 100 ,
job_class =>'DEFAULT_JOB_CLASS',
enabled => true,
auto_drop => true,
comments =>'test' ,
credential_name => 'null',
destination_name => 'null');
COMMIT;
END;
/
--在业务租户查看运行情况:
SELECT JOB_NAME,enabled,NEXT_RUN_DATE,state,last_start_date FROM DBA_SCHEDULER_JOBS;
返回结果示例如下:
+---------------------------+---------+-------------------------------------+-----------+-------------------------------------+
| JOB_NAME | ENABLED | NEXT_RUN_DATE | STATE | LAST_START_DATE |
+---------------------------+---------+-------------------------------------+-----------+-------------------------------------+
| FRIDAY_WINDOW | 1 | 13-SEP-24 10.00.00.000000 PM +08:00 | NULL | NULL |
| JOB$_1125899907865012 | 1 | 13-SEP-24 11.09.49.000000 AM +08:00 | SCHEDULED | 13-SEP-24 11.09.41.000965 AM +08:00 |
| MONDAY_WINDOW | 1 | 16-SEP-24 10.00.00.000000 PM +08:00 | SCHEDULED | 09-SEP-24 10.00.00.020702 PM +08:00 |
| OPT_STATS_HISTORY_MANAGER | 1 | 14-SEP-24 10.50.02.365883 AM +08:00 | SCHEDULED | 13-SEP-24 10.50.02.366764 AM +08:00 |
| SATURDAY_WINDOW | 1 | 14-SEP-24 06.00.00.000000 AM +08:00 | NULL | NULL |
| SUNDAY_WINDOW | 1 | 15-SEP-24 06.00.00.000000 AM +08:00 | NULL | NULL |
| THURSDAY_WINDOW | 1 | 19-SEP-24 10.00.00.000000 PM +08:00 | SCHEDULED | 12-SEP-24 10.00.00.012722 PM +08:00 |
| TUESDAY_WINDOW | 1 | 17-SEP-24 10.00.00.000000 PM +08:00 | SCHEDULED | 10-SEP-24 10.00.00.012928 PM +08:00 |
| WEDNESDAY_WINDOW | 1 | 18-SEP-24 10.00.00.000000 PM +08:00 | SCHEDULED | 11-SEP-24 10.00.00.015659 PM +08:00 |
+---------------------------+---------+-------------------------------------+-----------+-------------------------------------+
9 rows in set