литерал не соответствует строке формата в 12c Oracle

Я работаю над oracle 12c, но когда я выполняю свой запрос, я получаю

literal does not match format string

Ниже мой запрос:

INSERT INTO customers
  (customer_id, ciams_uid, title, fname, lname, email,
   dob, store_num, store_name, mobilephone, is_medical_card,
   scheme_number, status_code, create_date_time, last_update_time,
   is_locked, ciams_token, store_phone)
VALUES
  (1, '5', 'test', 'test', 'test', '[email protected]',
   '2014-07-07', '5555555', 'test', '7845125487', 0,
   4555, 'klkl', '2014-07-01', '2014-07-07',
   0, 'dsdssd', '46464646');

Я хочу вставить значения.


person Sushant kr. kunwar    schedule 11.06.2019    source источник
comment
Скорее всего, один (или несколько) ваших столбцов - это даты и время/временные метки, и вы передаете только литерал даты без компонента времени.   -  person Tim Biegeleisen    schedule 11.06.2019
comment
Вы передаете строковые литералы для дат. Предваряйте строки ключевым словом DATE, чтобы сделать их литералами даты. Например. DATE '2014-07-07'.   -  person Thorsten Kettner    schedule 11.06.2019


Ответы (2)


Кажется, вам нужно отформатировать значения даты

например date'2014-07-07' или to_date('2014-07-07','yyyy-mm-dd')

person Barbaros Özhan    schedule 11.06.2019

Вы предоставляете строки в местах, где необходимы DATE типы данных.

Oracle видит это и пытается преобразовать вашу строку «2014-07-07» в тип данных DATE. Это делается неявно, используя вашу текущую настройку для NLS_DATE_FORMAT.

Документы Oracle для NLS_DATE_FORMAT

Вы не должны полагаться на настройку NLS_DATE_FORMAT для неявного преобразования даты. Вместо этого явно включите литерал DATE, литерал TIMESTAMP или вызов функции TO_DATE.

Документация Oracle для литералов даты и времени

Примеры:

SELECT DATE'2014-07-07' FROM DUAL;
SELECT TIMESTAMP'2014-07-07 00:00:00' FROM DUAL;
SELECT TO_DATE('2014-07-07','YYYY-MM-DD') FROM DUAL;
person Tad Harrison    schedule 11.06.2019