---
title: "CREATE_JOB - OceanBase 数据库 V4.5.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.5.0

# CREATE_JOB

更新时间：2026-04-28 17:27:01

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.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 数据库企业版。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 表达式指定重复间隔。通过对指定的表达式求值，来确定作业下次运行的时间。   **说明** 该参数设置空会报错，但不影响功能使用。 |
| 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 | 指定作业允许运行的最长时间，单位为秒（s）。缺省值为 0，不指定时表示使用默认值。当取值为 0 时，实际按 30 秒生效。 |

## 使用说明

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

如果要将作业与指定类或程序相关联，需要具有该类或程序的 `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) 咨询热线
