GJSS Ответов: 0

ORA-01861: литерал не соответствует строке формата


Привет - у меня есть процедура,которая должна вставлять записи в таблицу 1 с помощью инструкции merge,при попытке выполнить proc я получаю "ORA-01861: литерал не соответствует строке формата".

Это может быть связано с несоответствием данных определенным столбцам, где исходная таблица имеет нулевые значения.

здесь столбец DATE_CREATED из источника имеет нулевые значения, а формат даты-'14-JAN-2018.

Что я уже пробовал:

создайте или замените процедуру PROC1 как
НАЧАТЬ
Сливаются в таблице table1 у
Использование вида m
На (у.Функция user_id = м.ID пользователя)
ЕСЛИ ОНО СОВПАДАЕТ, ТО ОБНОВЛЕНИЕ УСТАНОВИТЬ
u.активный = m.активный,
u.DATE_CREATED = m.DATE_CREATED,
u.CREATED_YEAR_MON = to_char(m.DATE_CREATED, 'YYYY-MM'),
у.CREATED_YEAR = to_char(м. DATE_CREATED, 'ГГГГ'),
у.CREATED_MON = to_char(м. DATE_CREATED, 'ММ'),
u.сектор = m.сектор,
у.Область = м. Области
НА
Ценностей (м. идентификатор пользователя, м. Акт, м.DATE_CREATED, to_char(м. DATE_CREATED, 'гггг-мм'), to_char(м. DATE_CREATED, 'ГГГГ'),
to_char(м. DATE_CREATED, "мм"), м.Сектора, м. ОБЛАСТИ, CURRENT_DATE ИСПОЛЬЗУЕТСЯ);
КОНЕЦ;

Richard Deeming

Хороший пример того, почему вы никогда не должны хранить даты в виде строк! :)

Типы Данных Даты[^]

Если вы храните значения правильно, с ними гораздо легче иметь дело, и они занимают меньше места, а также.

GJSS

Тип данных как исходной, так и целевой таблиц-это только тип данных DATE

Jörgen Andersson

Но вы пытаетесь хранить символы в этих столбцах дат, это не сработает.
Если вам нужна часть поля даты, вы должны использовать EXTRACT. https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions050.htm
Но это должно быть сделано, когда вам нужна часть, она никогда не должна храниться так, это плохая практика.

0 Ответов