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

7fyelxc5  于 2023-05-06  发布在  Oracle
关注(0)|答案(1)|浏览(128)

当在程序内提交作业时,错误显示错误消息(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
);
qoefvg9y

qoefvg9y1#

你犯了很多错误,但我看不出是什么原因造成的。

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* 在别处 * 计算它(见第5行),但是-这是徒劳的,因为DBMS_JOB返回作业ID;这并不是说您可以自己设置它(参见第15行后结果)
  • what需要在开始和命令本身之间有一个空格,否则会出现语法错误
  • comments不能在submit中使用(检查语法)
  • 你的数据库会说英语对吧我的没有,所以我改变了会话,使您的代码在我的数据库中工作。考虑不要使用日期名称,因为代码可能会在其他数据库中 * 中断 *
  • 你没有指定你使用的数据库版本;现在,在 * 现代 * 版本中,dbms_job只是为了向后兼容。考虑切换到dbms_scheduler

相关问题