Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORA-01840 :la valeur d'entrée n'est pas assez longue pour le format de date dans Oracle Insérer à l'aide de Sélectionner

Vous ne pouvez pas insérer une date "avec un format". Les dates ont une représentation interne, elles ont toujours tous les composants date/heure et peuvent ensuite être formatées pour l'affichage comme vous le souhaitez.

La chaîne que vous générez sous la forme AAAAMM est implicitement convertie en date par l'insertion, car il s'agit du type de données de la colonne cible. Cette conversion implicite utilise vos paramètres NLS et s'attend à ce qu'une valeur plus longue corresponde au format de date NLS. Votre chaîne ne correspond pas à ce format implicite, ce qui provoque l'erreur que vous voyez.

Si vous n'êtes intéressé que par l'année et le mois, le plus proche que vous puissiez obtenir est de stocker minuit le premier du mois, ce que vous pouvez obtenir avec 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;

J'ai également supprimé le supplément to_date appel. Vous devriez également envisager de passer à la syntaxe de jointure ANSI.

Vous pouvez ensuite formater c_date comme AAAAMM pour l'affichage lorsque vous l'interrogez, si c'est ce dont vous avez besoin, via to_char .