Sie können ein Datum nicht „mit einem Format“ einfügen. Datumsangaben haben eine interne Darstellung, sie haben immer alle Datums-/Zeitkomponenten und können dann für die Anzeige beliebig formatiert werden.
Die Zeichenfolge, die Sie als JJJJMM generieren, wird durch die Einfügung implizit in ein Datum konvertiert, da dies der Datentyp der Zielspalte ist. Diese implizite Konvertierung verwendet Ihre NLS-Einstellungen und erwartet daher einen längeren Wert, der dem NLS-Datumsformat entspricht. Ihre Zeichenfolge stimmt nicht mit diesem impliziten Format überein, was den angezeigten Fehler verursacht.
Wenn Sie nur an Jahr und Monat interessiert sind, können Sie am besten Mitternacht am Ersten des Monats speichern, was Sie mit trunc
erhalten :
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;
Ich habe auch das zusätzliche to_date
entfernt Anruf. Sie sollten auch in Betracht ziehen, zur ANSI-Join-Syntax zu wechseln.
Sie können dann c_date
formatieren als YYYYMM zur Anzeige, wenn Sie es abfragen, falls Sie dies benötigen, über to_char
.