Nemůžete vložit datum „ve formátu“. Data mají interní reprezentaci, vždy obsahují všechny komponenty data/času a lze je pak formátovat pro zobrazení, jak chcete.
Řetězec, který generujete jako RRRRMM, je vložením implicitně převeden na datum, protože to je datový typ cílového sloupce. Tento implicitní převod používá vaše nastavení NLS a od toho očekává delší hodnotu, aby odpovídala formátu data NLS. Váš řetězec neodpovídá tomuto implicitnímu formátu, což způsobuje chybu, kterou vidíte.
Pokud vás zajímá pouze rok a měsíc, nejbližší možnost je uložit si půlnoc prvního v měsíci, což můžete získat pomocí 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;
Také jsem odstranil přebytečný to_date
volání. Měli byste také zvážit přechod na syntaxi spojení ANSI.
Poté můžete formátovat c_date
jako RRRRMM, který se zobrazí při dotazu, pokud to potřebujete, pomocí to_char
.