sql >> Database teknologi >  >> RDS >> Oracle

Ikke en gyldig måned på en INSERT-erklæring

Medmindre du har en trigger på tabellen, der indstiller en dato- eller tidsstempelkolonne, hvilket ville give en indikation i hele fejlstakken, lyder det som din NLS_DATE_LANGUAGE forventer ikke en engelsksproget månedsforkortelse.

Det du har er gyldigt på engelsk:

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 

Men hvis din sessions standard datosprog er polsk (gætter fra din profil), vil det give denne fejl - med fejlmeddelelsen stadig på engelsk:

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"

Hvis du ikke ønsker at indstille din session til engelsk, kan du tilsidesætte det for en specifik erklæring ved at give den valgfri tredje parameter til to_timestamp() :

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 

Du kan også helt undgå problemet ved at bruge månedsnumre i stedet for månedsnavne eller bruge ANSI-tidsstemplets bogstavelige syntaks:

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       

Disse metoder virker også alle for datokolonner; to_date() funktion påvirkes af NLS-indstillinger på samme måde og har den samme valgfri datosprogparameter.




  1. Android-program til at konvertere SQLite-databasen til excel

  2. Sikkerhedskopier/eksportér en database fra SSH

  3. Tekstkomprimering i PostgreSQL

  4. Lås Oracle-databasen, før du kører Slet/indlæs data-scripts