---
title: "CREATE_JOB - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: CREATE_JOB CREATE_JOB 过程用于创建一个作业。 如果通过将 enabled 属性设置为 TRUE ，则 Scheduler 会根据其计划自动运行作业。如果创建的作业处于禁用状态，则只有通过使用 SET_ATTRIBUTE 过程启用该作业，该作业才会运行。 功能适用性 该内容仅适用于 OceanBa…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.6.0

# CREATE_JOB

更新时间：2026-07-15 15:27:39

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/700.reference/600.pl-reference/300.pl-oracle/1400.pl-system-package-oracle/14200.dbms-scheduler-oracle/200.create-job-oracle.md)  

`CREATE_JOB` 过程用于创建一个作业。

如果通过将 `enabled` 属性设置为 `TRUE`，则 Scheduler 会根据其计划自动运行作业。如果创建的作业处于禁用状态，则只有通过使用 `SET_ATTRIBUTE` 过程启用该作业，该作业才会运行。

#### 功能适用性

该内容仅适用于 OceanBase 数据库企业版。

## 语法

### 不使用现有程序或计划创建作业的语法

```sql
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);

```

### 使用已命名程序对象和内部计划创建作业的语法

```sql
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 表达式指定重复间隔。通过对指定的表达式求值，来确定作业下次运行的时间。   **说明** 该参数设置空会报错，但不影响功能使用。   此属性取值如下：   - `FREQ`：指定重复类型。必选。可能的预定义频率值为 `YEARLY`、`MONTHLY`、`WEEKLY`、`DAILY`、`HOURLY`、`MINUTELY` 和 `SECONDLY`。或者，指定现有计划作为用户定义的频率。 - `INTERVAL`：指定一个正整数，表示重复的频率。默认值为 `1`，表示每秒一次。     #### 注意      `INTERVAL` 和 `BY` 结合使用时，`INTERVAL` 必须在 `BY` 前面，例如 `freq=YEARLY；INTERVAL=2;BYMONTH=JUL` - `BYMONTH`：表示按月执行。可以是月份简称、数字或者其列表。列表之间用逗号分隔。取值范围 [1，12]。 - `BYYEARDAY`：以数字形式指定一年中的某一天。有效值为 [1，366]。 - `BYMONTHDAY`：指定月份中的日期。可以是数字或者其列表，列表之间用逗号分隔，需要根据月份选取合理的最大天数有效值为 [1，31]。 - `BYDAY`：指定了一个日期列表，可以是星期简称如 `MON` 或几个简称组成的列表，列表之间用逗号分隔，每周一算第一天。     #### 说明      不支持 `BYDAY` 指定负数，例如 `FREQ=MONTHLY;BYDAY=-1FRI`，表示每月最后一个周五执行。如果指定则会返回 `OB_PASSER_ERROR`。 - `BYHOUR`：指定作业运行的小时。可以是数字或者其列表，列表之间用逗号分隔，有效值为 [0，23]。 - `BYMINUTE`：指定作业运行的分钟数。可以是数字或者其列表，列表之间用逗号分隔，有效值为[0，59]。 - `BYSECOND`：指定作业运行的秒数。可以是数字或者其列表，列表之间用逗号分隔，有效值为[0，59]。  除上述介绍的单独指定作业重复的频率之外您也可以组合指定，组合条件规范如下：   - 当 `FREQ = YEARLY`, 可以使用 `BYMONTH + BYMONTHDAY` 组合，也可以使用 `BYYEARDAY`，后面可以跟`BYHOUR + BYMINUTE + BYSECONDY`。 - 当 `FREQ = MONTHLY`, 可以跟 `BYMONTHDAY + BYHOUR + BYMINUTE + BYSECOND`。 - 当 `FREQ = WEEKLY`, 可以跟 `BYDAY + BYHOUR + BYMINUTE + BYSECOND`。 - 当 `FREQ = DAILY`, 可以跟 `BYHOUR + BYMINUTE + BYSECOND`。 - 当 `FREQ = HOURLY`, 可以跟 `BYMINUTE + BYSECOND`。 - 当 `FREQ = MINUTELY`, 可以跟 `BYSECOND`。 - 当 `FREQ = SECONDLY`，不支持跟 `BYXXX`。 |
| 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_runs` 次。必须使用 `SET_ATTRIBUTE` 设置 `max_runs`。 - 该作业非重复的作业，只运行过一次。   当作业执行失败 `max_failures` 次时，将被禁用。`max_failures` 也使用 `SET_ATTRIBUTE` 设置。如果 `auto_drop` 设置为 `FALSE`，则不会删除作业，并保留其元数据，直到使用 `DROP_JOB` 过程显式删除作业。默认情况下，创建作业时将 `auto_drop` 设置为 `TRUE`。 |
| comments | 添加作业的注释。默认情况下，该属性为 `NULL`。 |
| job_style | 指定正在创建的作业的样式。此属性可能的取值如下：   - `'REGULAR'`：创建常规工作，为默认设置。 - `'LIGHTWEIGHT'`：创建轻量级作业。仅当作业引用程序对象时，才允许使用此值。当您需要频繁运行许多短期作业时，建议使用轻量级作业。在某些情况下，使用轻量级作业可以带来较小的性能提升。 - `'IN_MEMORY_RUNTIME'`：创建内存内运行时作业。这些作业基于轻量级工作结构，它们通过保持内存内缓存进一步提高了性能，因此可以最大限度地减少运行前和运行后操作的磁盘访问。 - `'IN_MEMORY_FULL'`：创建内存内已满的作业。内存中的完整作业需要一个程序，不能有时间计划或重复间隔。当作业启用时，它们会自动运行，运行后会被丢弃。它们将所有作业信息保存在内存中，不会备份到磁盘上，也就是说在实例重新启动时这些信息会丢失。它们的目的是以尽可能少的开销运行必须立即执行的操作。 |
| credential_name | 指定与作业一起使用的默认凭据。对于本地数据库作业，它的值必须为 `NULL`。仅对于本地外部作业，如果此属性为 `NULL`（默认），则选择首选（默认）凭据。 |
| destination_name | 指定作业的数据库目标或外部目标。如果 `CREATE_JOB` 的 `credential_name` 参数为 `NULL`，则每个目的地前面必须有一个凭据，格式如下： `sql credential.destination`。 |
| max_run_duration | 指定作业的最长运行时间。 |

## 使用说明

默认情况下，用户所创建的作业是被禁用的，必须显示启用作业，以便可以按照计划运行作业。

如果要将作业与指定类或程序相关联，需要具有该类或程序的 `EXECUTE` 权限。

并不是所有可能的作业属性都可以用 `CREATE_JOB` 设置，一些参数必须在创建作业后设置。例如 `job_priority` 和 `max_runs` 等参数需要通过 `SET_ATTRIBUTE` 过程进行设置。

## 示例

```sql
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;

```

返回结果示例如下：

```shell
+---------------------------+---------+-------------------------------------+-----------+-------------------------------------+
| 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

```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
