1

当此代码在 SQL Developer 中针对 Oracle 11g 执行时,我得到一个错误,

begin
dbms_scheduler.create_job(
  job_name => 'comuni_34',
  job_type => 'plsql_block',
  job_action => 'begin com_auth_api.expire_old_passwords; end;',
  start_date => to_date('2009-jan-01 01:15:00', 'yyyy-mon-dd hh24:mi:ss'),
  repeat_interval => 'freq=daily',
  enabled => true,
  comments => 'Expire old passwords'
);
end;

这是错误,

Error starting at line 4 in command:
begin
dbms_scheduler.create_job(
  job_name => 'comuni_34',
  job_type => 'plsql_block',
  job_action => 'begin com_auth_api.expire_old_passwords; end;',
  start_date => to_date('2009-jan-01 01:15:00', 'yyyy-mon-dd hh24:mi:ss'),
  repeat_interval => 'freq=daily',
  enabled => true,
  comments => 'Expire old passwords'
);
end;
Error report:
ORA-01870: the intervals or datetimes are not mutually comparable
ORA-06512: at "SYS.DBMS_ISCHED", line 99
ORA-06512: at "SYS.DBMS_SCHEDULER", line 268
ORA-06512: at line 2
01870. 00000 -  "the intervals or datetimes are not mutually comparable"
*Cause:    The intervals or datetimes are not mutually comparable.
*Action:   Specify a pair of intervals or datetimes that are mutually
           comparable.

谷歌搜索没有帮助,因为它只是列出了大量无用的 Oracle 错误代码站点。

也许 SYS.DBMS_ISCHED/SYS.DBMS_SCHEDULER 的来源可以解释这一点。

更新:使用 '2010-apr-20 01:15:00' 而不是 '2009-jan-01 01:15:00' 的另一份工作刚刚奏效,也许问题是过去太远的日期不是正确处理。

更新:使用 '2009-apr-01 01:15:00' 而不是 '2009-jan-01 01:15:00' 才有效。然而,'2009-mar-01 01:15:00' 没有工作,所以有一个限制,一个工作可以开始多远。由于我已经解决了我的问题,我不能接受重复我的解决方案的答案,但如果有人想进一步解释这一点,我会考虑接受。

4

4 回答 4

1

我认为,您的会话中有一组错误的 NLS_LANG* 参数。SQL Developer 会自动执行此操作。在 sqlplus 中脚本的开头尝试这个地方:

ALTER SESSION SET NLS_LANGUAGE= 'AMERICAN';
ALTER SESSION SET NLS_TERRITORY= 'AMERICA';

所以在那之后尝试运行:

begin
dbms_scheduler.create_job(
  job_name => 'comuni_34',
  job_type => 'plsql_block',
  job_action => 'begin com_auth_api.expire_old_passwords; end;',
  start_date => to_date('2009-jan-01 01:15:00', 'yyyy-mon-dd hh24:mi:ss'),
  repeat_interval => 'freq=daily',
  enabled => true,
  comments => 'Expire old passwords'
);
end;
/
于 2010-08-31T10:58:07.550 回答
1

我没有 11g 来测试它,但在 10.2.0.4 数据库上,CREATE_JOB 早在 1970 年 1 月 1 日的 START_DATE 就成功了。这可能是一个错误,如果您有权访问,您可能需要检查 Metalink。

于 2010-08-31T10:48:36.470 回答
1

谢谢!这是我发现的关于该问题的唯一相关信息,谷歌没有显示任何结果......

我在 SQL Developer 18.3.0.277 和 Oracle 12c 数据库中遇到了类似的问题。

过去它对我有用过几次,但突然它显示了 ora-01870 错误。

我试过了

ALTER SESSION SET NLS_LANGUAGE= 'AMERICAN';
ALTER SESSION SET NLS_TERRITORY= 'AMERICA';

但这没有帮助。

最后真正有帮助的是 SQL Developer 重新启动。断开连接并连接或放弃工作/创建工作没有帮助。每次我想启用该作业时都会显示该错误。

在问题发生之前,我没有进行任何更改会话或类似操作。我只是禁用了工作,当我想再次启用时,显示了该错误。

于 2020-04-22T14:55:27.433 回答
0

您可能会考虑函数 OVERLAPS 的行为。不知道Scheduler有没有用,但是报错信息是一样的:

SQL> select 1 from dual where (sysdate,sysdate+2) overlaps (sysdate+1,sysdate+5);

         1
----------
         1

SQL> select 1 from dual where (null,sysdate+2) overlaps (sysdate+1,sysdate+5);
         1
----------
         1

SQL> select 1 from dual where (sysdate+2,null) overlaps (sysdate+1,sysdate+5);
         1
----------
         1

SQL> select 1 from dual where (null,null) overlaps (sysdate+1,sysdate+5);
select 1 from dual where (null,null) overlaps (sysdate+1,sysdate+5)

ORA-01870: the intervals or datetimes are not mutually comparable
于 2018-02-14T12:39:26.583 回答