SQL Navigator выдает «ORA-01834: недопустимый месяц», но запрос выполняется в других приложениях - PullRequest
1 голос
/ 06 декабря 2011

Я накапливал эту ошибку много раз, но знаю, что у меня нет способа ее избежать, и я должен избавиться от нее.

Иногда я запускаю запрос в SQL Navigator 6.1 XPert Edition и выдает:*

ORA-01843: Not a valid month

Но если я выполню этот же запрос в той же базе данных, но в другом приложении (например, Aqua Data Studio), он будет работать нормально.Это только в отдельных случаях.

Может быть, какая-то проблема с конфигурацией?

РЕДАКТИРОВАТЬ: Этот запрос имеет эту проблему:

            select
                quantity dias_a_vencer
                , estab
                , initcap (planejador) planejador
                , atributo2 fabrica
                , mrp.item montagem
                , initcap (descricao) des_montagem
                , mrp.nro_docmto num_of
                , initcap (mrp.fornecedor) cliente
                , mrp.project_number projeto
                , initcap (comprador) processista
                , trunc (mrp.data_inicio) data_inicio
            from etlt_mrp_exceptions mrp
            where 
                mrp.compile_designator = 'ENGI'
                and mrp.dt_coleta > sysdate - 50
                and estab = '179'        -- PARAMETRO ESTAB FILTRO
                and atributo2 = '11'   -- PARAMETRO FABRICA FILTRO
                and nvl (mrp.quantity, 0) > 0
                and dt_coleta = '05/12/2011'                         -- parametro do grafico acima
                and initcap (planejador) = 'Maria Cristina Da Cruz Costa'        -- parametro do grafico acima
            order by quantity
            , des_montagem

Ответы [ 3 ]

3 голосов
/ 06 декабря 2011

Чтобы сделать ваш запрос отказоустойчивым в всех средах, вам нужно изменить эту строку:

and dt_coleta = '05/12/2011'  

до

and dt_coleta = to_date('05/12/2011', 'DD/MM/YYYY')

Предполагая, что вы имели в виду 5 декабря, а не 12 мая.

Кстати: какой тип данных столбцы estab и atributo2. Если это числа, вы должны удалить одинарные кавычки вокруг параметров. Это еще одно «неявное» преобразование данных, которое, например, запретить использование индекса для этих столбцов.

1 голос
/ 06 декабря 2011

Всегда указывайте формат даты, никогда не используйте его или не используйте форматы по умолчанию. Например:

insert into mytable (mydate) values (to_date('02/28/2011', 'MM/DD/YYYY'));
0 голосов
/ 14 августа 2014

К сожалению, даже использование TO_DATE () не гарантирует успеха.(Но я настоятельно рекомендую, чтобы вы всегда знали о формате даты в игре.) Например, с помощью SQL * Developer это работает:

alter session set nls_date_format='yyyy-mon-dd hh24:mi:ss.ddd';

select * from nns.nns_logGER WHERE LOG_DATE >= '2014-jul-30 14:47:16.211';

, но это не работает с "ORA-01834: день месяца конфликтует с юлианской датой "ошибка:

alter session set nls_date_format='yyyy-mon-dd hh24:mi:ss.ddd';

select * from nns.nns_logGER WHERE LOG_DATE >= '2014-jul-30 14:47:16.210';

Обратите внимание, что я изменил только последнюю цифру.И использование to_date не помогло:

select * from nns.nns_logGER WHERE LOG_DATE >= 
to_date('2014-jul-30 14:47:16.210','yyyy-mon-dd hh24:mi:ss.ddd');

терпит неудачу таким же образом.

Хотелось бы, чтобы были лучшие новости, но я думаю, что это должно быть внутренней проблемой.

...