sql >> Database >  >> RDS >> Oracle

Geen geldige maand op een INSERT-statement

Tenzij je een trigger op de tabel hebt die een datum- of tijdstempelkolom instelt, wat een indicatie zou geven in de volledige foutstack, klinkt het als je NLS_DATE_LANGUAGE verwacht geen Engelstalige maandafkorting.

Wat je hebt is geldig in het Engels:

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 

Maar als de standaardtaal van uw sessie Pools is (afgaande op uw profiel), geeft het deze foutmelding - met de foutmelding nog steeds in het Engels:

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"

Als u uw sessie niet op Engels wilt instellen, kunt u dat voor een specifieke instructie overschrijven door de optionele derde parameter aan to_timestamp() te geven :

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 

U kunt het probleem ook volledig vermijden door maandnummers te gebruiken in plaats van maandnamen, of door de letterlijke syntaxis van de ANSI-tijdstempel te gebruiken:

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       

Deze methoden werken ook allemaal voor datumkolommen; de to_date() functie wordt op dezelfde manier beïnvloed door NLS-instellingen en heeft dezelfde optionele datumtaalparameter.




  1. Atomic UPSERT in SQL Server 2005

  2. Hoe het MySQL-tekencoderingsprobleem op te lossen?

  3. CURRENT_DATE Functie in Oracle

  4. Getallen opmaken met een komma in SQLite