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

ORA-1843:невалиден месец при актуализиране на записа

Датата няма формат - тя се съхранява вътрешно в базата данни като 7-байта (представляващ година, месец, ден, час, минута и секунда) и чак когато потребителският интерфейс, който използвате (т.е. SQL/Plus, SQL Developer, Java и т.н.), не се опита да го покаже на вас, потребителя, и преобразува в нещо, което бихте намерили за смислено (обикновено низ), че датата има формат.

Ако предоставяте форматирана дата на процедура, тогава тя ще бъде низ и Oracle ще се опита имплицитно да я преобразува в дата, използвайки NLS_DATE_FORMAT параметър на сесията:

UPDATE your_table
SET your_date_column = '18-06-14'; -- or equivalently via a bind parameter

Неявно се преобразува в

UPDATE your_table
SET your_date_column = TO_DATE(
                         '18-06-14',
                         ( SELECT value
                           FROM   NLS_SESSION_PARAMETERS
                           WHERE  parameter = 'NLS_DATE_FORMAT' )
                       );

Ако NLS_DATE_FORMAT не съвпада, тогава Oracle ще предизвика изключение (и параметърът може да бъде зададен от всеки потребител, така че не трябва да разчитате, че е последователен - особено в международни организации, когато форматът на датата по подразбиране зависи от вашата територия и език).

Ако актуализирате стойността, използвайте DATE литерал, а не низ:

UPDATE your_table
SET your_date_column = DATE '2014-06-18';

Или изрично конвертирайте низа и осигурете модела на формат:

UPDATE your_table
SET your_date_column = TO_DATE( '18-06-14', 'DD-MM-RR' );

Същото важи и за предаването на параметри към вашата функция. Или използвайте DATE литерал:

BEGIN
  your_procedure(
    p_launch_date => DATE '2014-06-18'
  );
END;
/

или изрично преобразувайте низа в дата (и не разчитайте на имплицитно преобразуване):

BEGIN
  your_procedure(
    p_launch_date => TO_DATE( '18-06-14', 'DD-MM-RR' )
  );
END;
/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавите пореден номер за всеки елемент в група с помощта на SQL заявка без временни таблици

  2. SQL таблицата не съществува

  3. Как да получите достъп до структурата и да получите списък с колони, типове данни на рекурсора?

  4. Oracle:зареждане на голям xml файл?

  5. Oracle SQL Намиране на 5-те най-ниски заплати