Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORA-01840:valor de entrada não longo o suficiente para o formato de data no Oracle Insert usando Select


Você não pode inserir uma data 'com um formato'. As datas têm uma representação interna, elas sempre têm todos os componentes de data/hora e podem ser formatadas para exibição como você quiser.

A string que você está gerando como YYYYMM está sendo convertida implicitamente em uma data pela inserção, pois esse é o tipo de dados da coluna de destino. Essa conversão implícita está usando suas configurações de NLS e, a partir disso, espera um valor mais longo para corresponder ao formato de data NLS. Sua string não corresponde a esse formato implícito, o que está causando o erro que você está vendo.

Se você está interessado apenas no ano e no mês, o mais próximo que você pode obter é armazenar meia-noite no primeiro dia do mês, que você pode obter com trunc :
INSERT INTO CS_LOG(NAME, ID, C_DATE)
Select MAX(ML.NAME), ML.ID, TRUNC(CHK_DATE,'MM')
from D_ID ML,CS_LOG MD
WHERE ML.NAME != MD.NAME and ML.ID != MD.ID
and MD.C_DATE = LAST_DAY(sysdate)
GROUP BY ML.ID,C_DATE;

Também removi o to_date extra ligar. Você também deve considerar mudar para a sintaxe de junção ANSI.

Você pode formatar c_date como YYYYMM para exibição quando você consulta, se é isso que você precisa, via to_char .