Oracle
 sql >> база данни >  >> RDS >> Oracle

Не е валиден месец за извлечение INSERT

Освен ако нямате тригер в таблицата, който задава колона с дата или време, което би дало някаква индикация в пълния стек от грешки, звучи като вашия NLS_DATE_LANGUAGE не очаква англоезично съкращение за месец.

Това, което имате, е валидно на английски:

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 

Но ако езикът за дата по подразбиране на вашата сесия е полски (отгатване от вашия профил), това ще даде тази грешка - със съобщението за грешка все още на английски:

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"

Ако не искате да настроите сесията си на английски, можете да замените това за конкретно изявление, като дадете незадължителния трети параметър на 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 

Можете също така да избегнете проблема изцяло, като използвате номера на месеци вместо имена на месеци или като използвате ANSI литерален синтаксис за времеви отпечатъци:

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       

Всички тези методи работят и за колони с дата; to_date() функцията се влияе от настройките на NLS по същия начин и има същия опционален езиков параметър за дата.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. REGEXP_COUNT() Функция в Oracle

  2. Как да използвам Array/Table Parameter към Oracle (ODP.NET 10g) чрез ADO.NET/C#?

  3. Посочен е невалиден URL адрес на Oracle:OracleDataSource.makeURL

  4. Oracle използва ли оценка на късо съединение?

  5. ORA-01658:не може да се създаде НАЧАЛНА степен за сегмент в пространството за таблици TS_DATA