Forum Stats

  • 3,768,743 Users
  • 2,252,843 Discussions
  • 7,874,705 Comments

Discussions

ORA-01840: valor de entrada não é longo o suficiente para formato de data

Jonts
Jonts Member Posts: 10 Green Ribbon
edited Sep 2, 2019 12:21PM in SQL and PL/SQL (Portuguese)

Bom dia,

Oracle Database 11g Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

Como eu devo formatar o campo data para não corrigir o erro ORA-01840?

Eu fiz esse select abaixo:

SELECT to_binary_double(JOB ) CODIGO, to_date(LAST_DATE, 'DD/MM/YYYY HH24:MI:SS') ||' '||LAST_SEC "ULTIMA EXECUCAO", to_date(NEXT_DATE, 'DD/MM/YYYY HH24:MI:SS') ||' '|| NEXT_SEC "PROXIMA EXECUCAO", to_binary_double(FAILURES) FALHA, WHAT COMANDO,     CASE JOB         WHEN 156 THEN 'Job1'         WHEN 155 THEN 'Job2'        WHEN 157 THEN 'Job3'     ELSE WHAT END NOMEFROM JOB WHERE JOB IN (156,155, 157)ORDER BY NOME

pastedImage_2.png

Best Answer

  • J.Laurindo Chiappa
    J.Laurindo Chiappa Member Posts: 28
    edited Aug 29, 2019 1:08PM Accepted Answer

    Não, colega, NÃO : pra começo de conversa, se as colunas LAST_DATE e NEXT_DATE ** Já São do tipo DATE **, é Óbvio que um TO_DATE de algo que já é DATE só pode causar problemas, é Absurdo usar isso.... Pode INCLUSIVE olhar na documentação (manual SQL Reference) que ele TEXTUALMENTE diz que TO_DATE só aceita valores STRING :

    "TO_DATE converts char of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 datatype to a value of DATE datatype"

    OK ?? Passar um valor DATE pra uma função que só aceita STRINGs te leva DIRETAMENTE para o inferno das conversões implicitas, valews ??

    No caso, ao que entendi vc quer concatenar a DATA CONVERTIDA PARA STRING com as colunas LAST_SEC e NEXT_SEC, que são STRINGs, certo ?? String com string dá pé, DATE com string cedo ou tarde dá jacaré.... O modo CORRETO de escrever o seu SQL será :

        SELECT  

        to_binary_double(JOB ) CODIGO,  

        to_char(LAST_DATE, 'DD/MM/YYYY') ||' '|| LAST_SEC "ULTIMA EXECUCAO",  

        to_char(NEXT_DATE, 'DD/MM/YYYY') ||' '|| NEXT_SEC "PROXIMA EXECUCAO",  

        to_binary_double(FAILURES) FALHA,  

        WHAT COMANDO,  

            CASE JOB  

                WHEN 156 THEN 'Job1'  

                WHEN 155 THEN 'Job2' 

                WHEN 157 THEN 'Job3'  

            ELSE WHAT END NOME 

        FROM JOB WHERE JOB IN (156,155, 157) 

        ORDER BY NOME 

       

    ==> data convertida pra string CONCATENANDO com valor string aí é Perfeito, okdoc ??

    Abraços,   

      Chiappa

Answers

  • J.Laurindo Chiappa
    J.Laurindo Chiappa Member Posts: 28
    edited Aug 29, 2019 1:08PM Accepted Answer

    Não, colega, NÃO : pra começo de conversa, se as colunas LAST_DATE e NEXT_DATE ** Já São do tipo DATE **, é Óbvio que um TO_DATE de algo que já é DATE só pode causar problemas, é Absurdo usar isso.... Pode INCLUSIVE olhar na documentação (manual SQL Reference) que ele TEXTUALMENTE diz que TO_DATE só aceita valores STRING :

    "TO_DATE converts char of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 datatype to a value of DATE datatype"

    OK ?? Passar um valor DATE pra uma função que só aceita STRINGs te leva DIRETAMENTE para o inferno das conversões implicitas, valews ??

    No caso, ao que entendi vc quer concatenar a DATA CONVERTIDA PARA STRING com as colunas LAST_SEC e NEXT_SEC, que são STRINGs, certo ?? String com string dá pé, DATE com string cedo ou tarde dá jacaré.... O modo CORRETO de escrever o seu SQL será :

        SELECT  

        to_binary_double(JOB ) CODIGO,  

        to_char(LAST_DATE, 'DD/MM/YYYY') ||' '|| LAST_SEC "ULTIMA EXECUCAO",  

        to_char(NEXT_DATE, 'DD/MM/YYYY') ||' '|| NEXT_SEC "PROXIMA EXECUCAO",  

        to_binary_double(FAILURES) FALHA,  

        WHAT COMANDO,  

            CASE JOB  

                WHEN 156 THEN 'Job1'  

                WHEN 155 THEN 'Job2' 

                WHEN 157 THEN 'Job3'  

            ELSE WHAT END NOME 

        FROM JOB WHERE JOB IN (156,155, 157) 

        ORDER BY NOME 

       

    ==> data convertida pra string CONCATENANDO com valor string aí é Perfeito, okdoc ??

    Abraços,   

      Chiappa