Не можете да вмъкнете дата „с формат“. Датите имат вътрешно представяне, те винаги имат всички компоненти за дата/час и след това могат да бъдат форматирани за показване, както желаете.
Низът, който генерирате като ГГГГММ, се преобразува неявно в дата от вмъкването, тъй като това е типът данни на целевата колона. Това имплицитно преобразуване използва вашите настройки за NLS и от това се очаква по-дълга стойност, която да съответства на формата на датата на NLS. Вашият низ не съответства на този скрит формат, което причинява грешката, която виждате.
Ако се интересувате само от годината и месеца, тогава най-близкото, което можете да получите, е да съхраните полунощ на първо число от месеца, което можете да получите с trunc
:
INSERT INTO CS_LOG(NAME, ID, C_DATE)
Select MAX(ML.NAME), ML.ID, TRUNC(CHK_DATE,'MM')
from D_ID ML,CS_LOG MD
WHERE ML.NAME != MD.NAME and ML.ID != MD.ID
and MD.C_DATE = LAST_DAY(sysdate)
GROUP BY ML.ID,C_DATE;
Премахнах и допълнителния to_date
повикване. Трябва да помислите и за преминаване към ANSI синтаксис за свързване.
След това можете да форматирате c_date
като ГГГГММ за показване, когато го заявите, ако това е, което ви трябва, чрез to_char
.