Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-01840:Eingabewert nicht lang genug für Datumsformat in Oracle Insert mit Select

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 .