SQL Navigator抛出'ORA-01834:不是有效月份',但查询在其他应用程序中运行

时间:2011-12-06 12:52:27

标签: oracle sql-navigator

我已多次存在此错误,但知道我无法避免,我必须摆脱它。

有时我会在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 个答案:

答案 0 :(得分:3)

要在所有环境中使查询失效,您必须更改此行:

and dt_coleta = '05/12/2011'  

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

假设你的意思是12月5日,而不是5月12日。

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

答案 1 :(得分:1)

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

insert into mytable (mydate) values (to_date('02/28/2011', 'MM/DD/YYYY'));

答案 2 :(得分: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:与Julian日期冲突的日期"错误:

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');

以同样的方式失败。

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