1

我已经多次储存这个错误,但我知道我无法避免,我必须摆脱它。

有时我会运行一个查询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
4

3 回答 3

3

为了使您的查询在所有环境中都安全,您必须更改此行:

and dt_coleta = '05/12/2011'  

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

假设您指的是 12 月 5 日,而不是 5 月 12 日。

顺便说一句:什么数据类型是列estabatributo2. 如果这些是数字,则应删除参数周围的单引号。这是另一种“隐式”数据转换,例如会阻止在这些列上使用索引。

于 2011-12-06T14:39:59.793 回答
1

始终指定日期格式,切勿假设或使用默认格式。例如:

insert into mytable (mydate) values (to_date('02/28/2011', 'MM/DD/YYYY'));
于 2011-12-06T13:29:26.180 回答
0

不幸的是,即使使用 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');

以同样的方式失败。

我希望有更好的消息,但我认为这一定是一些内部问题。

于 2014-08-14T17:04:24.160 回答