Объясните: «ORA-01870: интервалы или даты не взаимно сопоставимы». - PullRequest
0 голосов
/ 31 августа 2010

Когда этот код выполняется в 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.

Поиск Google не помог, так кактолько что перечислено множество бесполезных сайтов с кодами ошибок Oracle.

Возможно, это объясняет источник SYS.DBMS_ISCHED / SYS.DBMS_SCHEDULER.

Обновление: другая работа, использующая '2010-apr-2001: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» не сработало, поэтому существует предел того, насколько далеко можно начать задание.Поскольку я решил свою проблему, я не могу принять ответ, который является повторением моего решения, но если кто-то захочет объяснить это дальше, я подумаю принять его.

Ответы [ 3 ]

1 голос
/ 31 августа 2010

Я думаю, у вас неправильный набор параметров 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;
/
1 голос
/ 31 августа 2010

У меня нет 11g для тестирования, но в базе данных 10.2.0.4 CREATE_JOB был успешным с START_DATE еще 01 января 1970 года. Это может быть ошибка, и вы можете проверить на Metalink, если у вас есть доступ.

0 голосов
/ 14 февраля 2018

Вы можете рассмотреть поведение функции OVERLAPS. Я не знаю, использует ли его планировщик, но сообщение об ошибке такое же:

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
...