Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Nie ważny miesiąc na wyciągu INSERT

Jeśli nie masz wyzwalacza w tabeli, który ustawia kolumnę daty lub sygnatury czasowej, co dałoby pewną wskazówkę w pełnym stosie błędów, brzmi to tak, jakby Twój NLS_DATE_LANGUAGE nie oczekuje skrótu w języku angielskim.

To, co masz, jest ważne w języku angielskim:

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 

Ale jeśli domyślnym językiem daty sesji jest polski (zgadując z twojego profilu), wyświetli się ten błąd - z komunikatem błędu nadal w języku angielskim:

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"

Jeśli nie chcesz ustawiać swojej sesji na angielski, możesz to zmienić dla określonej instrukcji, podając opcjonalny trzeci parametr funkcji 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 

Możesz również całkowicie uniknąć tego problemu, używając numerów miesięcy zamiast nazw miesięcy lub używając składni literału ANSI timestamp:

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       

Wszystkie te metody działają również w przypadku kolumn dat; to_date() na funkcję mają wpływ ustawienia NLS w ten sam sposób i ma ten sam opcjonalny parametr języka daty.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pamięć podręczna wyników

  2. Obsługa ExecuteScalar(), gdy nie są zwracane żadne wyniki

  3. Jak mogę wprowadzić wiele warunków w operatorze LIKE?

  4. Transpozycja wybranych wyników za pomocą Oracle

  5. SQLDeveloper nie wyświetla żadnych tabel pod połączeniami, gdzie jest napisane tabele