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

Kein gültiger Monat in einer INSERT-Anweisung

Sofern Sie keinen Trigger in der Tabelle haben, der eine Datums- oder Zeitstempelspalte festlegt, was einen Hinweis auf den vollständigen Fehlerstapel geben würde, klingt es wie Ihr NLS_DATE_LANGUAGE erwartet keine englischsprachige Monatsabkürzung.

Was Sie haben, ist auf Englisch gültig:

alter session set nls_timestamp_format = 'RR/MM/DD HH24:MI:SSXFF';
alter session set nls_date_language ='ENGLISH';

select to_timestamp('15-APR-14 01.36.58.803000000 PM',
  'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;

MY_DATE                   
---------------------------
14/04/15 13:36:58.803000000 

Aber wenn die Standarddatumssprache Ihrer Sitzung Polnisch ist (aus Ihrem Profil zu erraten), wird dieser Fehler ausgegeben - mit der Fehlermeldung immer noch auf Englisch:

alter session set nls_date_language ='POLISH';

select to_timestamp('15-APR-14 01.36.58.803000000 PM',
  'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;

SQL Error: ORA-01843: not a valid month
01843. 00000 -  "not a valid month"

Wenn Sie Ihre Sitzung nicht auf Englisch setzen möchten, können Sie dies für eine bestimmte Anweisung überschreiben, indem Sie den optionalen dritten Parameter an to_timestamp() übergeben :

alter session set nls_date_language ='POLISH';

select to_timestamp('15-APR-14 01.36.58.803000000 PM',
  'DD-MON-RR HH.MI.SS.FF AM',
  'NLS_DATE_LANGUAGE=ENGLISH') as my_date
from dual;

MY_DATE                   
---------------------------
14/04/15 13:36:58.803000000 

Sie können das Problem auch vollständig vermeiden, indem Sie Monatsnummern anstelle von Monatsnamen verwenden oder die ANSI-Timestamp-Literal-Syntax verwenden:

select timestamp '2014-04-15 13:36:58.803' from dual;

TIMESTAMP'2014-04-1513:36:58.803'
---------------------------------
14/04/15 13:36:58.803000000       

Diese Methoden funktionieren auch alle für Datumsspalten; das to_date() Die Funktion wird auf die gleiche Weise von den NLS-Einstellungen beeinflusst und hat den gleichen optionalen Parameter für die Datumssprache.