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
.