提交 Oracle 调度程序作业时(42/76 PLS-00166:日期、时间、时间戳或间隔文字的格式错误)收到此错误消息

问题描述 投票:0回答:1

在过程中提交作业时显示错误,显示错误消息(42/76 PLS-00166:日期、时间、时间戳或间隔文字的格式错误)。作业配置显示如下。

DBMS_JOB.SUBMIT (
    job_number => v_job_ID + 1,
    what       => 'BEGIN'|| v_query ||'END',
    next_date  => TRUNC(NEXT_DAY(SYSDATE, 'SUN')) + 2.5/24, -- 2:30 AM,
    interval   => 'NEXT_DAY(TRUNC(SYSDATE), ''SUN'') + 2.5/24',
    comments   => 'Job to run every sunday at 2:30 AM',
    no_parse   => TRUE
);
oracle plsql job-scheduling
1个回答
1
投票

嗯,你犯了各种各样的错误,但我不明白你提到的是什么导致了错误。

SQL> ALTER SESSION SET nls_date_language = 'english';

Session altered.

SQL> SET SERVEROUTPUT ON;
SQL>
SQL> DECLARE
  2     v_job_id  NUMBER := 0;
  3     v_query   VARCHAR2 (100) := 'null;';
  4  BEGIN
  5     v_job_id := v_job_id + 1;
  6     DBMS_JOB.SUBMIT (job        => v_job_ID,
  7                      what       => 'BEGIN ' || v_query || ' END',
  8                      next_date  => TRUNC (NEXT_DAY (SYSDATE, 'SUN')) + 2.5 / 24, -- 2:30 AM,
  9                      interval   => 'NEXT_DAY(TRUNC(SYSDATE), ''SUN'') + 2.5/24',
 10                      --comments    => 'Job to run every sunday at 2:30 AM',
 11                      no_parse   => TRUE);
 12
 13     DBMS_OUTPUT.put_line (v_job_id);
 14  END;
 15  /
2983346

PL/SQL procedure successfully completed.

SQL>
  • 你不能把
    v_job_ID + 1
    变成
    submit
    ;计算它elsewhere(见第5行),但是 - 这是徒劳的,因为
    DBMS_JOB
    返回工作
    ID
    ;这不是你可以自己设置的(见第 15 行后的结果)
  • what
    需要在开始和命令本身之间有一个空格,否则你会得到语法错误
  • comments
    不能用在
    submit
    (检查语法)
  • 您的数据库说英语,不是吗?我的没有,所以我改变了会话,以便您的代码在我的数据库中工作。考虑不要使用日期名称,因为代码可能 break 在其他数据库中
  • 您没有指定您使用的数据库版本;如今,在 modern 版本中,
    dbms_job
    只是为了向后兼容。考虑切换到
    dbms_scheduler
© www.soinside.com 2019 - 2024. All rights reserved.