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.