2010-08-31 8 views
0

Когда этот код выполняется в SQL Developer с Oracle 11g, я получаю ошибку,Объяснить «ORA-01870: интервалы или DateTimes не являются взаимно сопоставимыми»

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-20 01:15:00» вместо «2009-jan-01 01:15:00», просто работало, возможно, проблема заключается в том, что даты, прошлое не обрабатывается правильно.

Обновление: использование '2009-apr-01 01:15:00' вместо '2009-jan-01 01:15:00' только что сработало. Однако «2009-март-01 01:15:00» не работал, поэтому существует ограничение на то, как можно начать работу. Поскольку я решил свою проблему, я не могу принять ответ, который является повторением моего решения, но если кто-то захочет объяснить это дальше, я подумаю об этом.

+1

альтернативно, вы можете публиковать свои обновления в качестве ответа и принять это. В документации не указывается нижняя граница для START_DATE, и ваши объяснения кажутся достаточно разумными. – APC

ответ

1

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

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; 
/
+0

У меня была такая же ошибка при создании задания, без установки какого-либо значения start_date из удаленной коробки в db. Я попробовал другой сеанс, зарегистрированный как учетная запись oracle на узле экземпляра, и он работал, поэтому я подозреваю, что проблема связана с NLS. Необходимо подтвердить. –

0

Вы могли бы рассмотреть поведение функции перекрывается. Я не знаю, использует ли 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