oracle 解释“ORA-01870:间隔或日期时间不相互可比”

esyap4oy  于 2023-11-17  发布在  Oracle
关注(0)|答案(4)|浏览(168)

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

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.


谷歌搜索没有帮助,因为它只是列出了大量无用的甲骨文错误代码网站。
也许.DBMS_ISCHED/.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'没有工作,所以有一个限制多远的工作可以开始.因为我已经解决了我的问题,我不能接受一个答案,这是一个重复我的解决方案,但如果有人想进一步解释这一点,我会考虑接受.

cgfeq70w

cgfeq70w1#

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

cmssoen2

cmssoen22#

我认为,您在会话中使用了错误的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;
/

db2dz4w8

db2dz4w83#

谢谢!这是我发现的关于这个问题的唯一相关信息,谷歌没有显示结果.
我在SQL Developer 18.3.0.277和Oracle 12 c数据库中遇到了类似的问题。
它在过去为我工作过几次,但突然它显示ora-01870错误。
我试

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

字符串
但没有用
最后帮助的是SQL Developer重新启动,真的。断开连接或删除作业/创建作业没有帮助。每次我想启用作业时都会显示错误。
我没有改变会话或类似的问题发生之前。我只是禁用工作,当我想再次启用该错误显示。

67up9zun

67up9zun4#

你可以考虑函数OVERLAPS的行为。我不知道MySQL是否使用它,但错误消息是相同的:

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

字符串

相关问题