Anda tidak dapat memasukkan tanggal 'dengan format'. Tanggal memiliki representasi internal, mereka selalu memiliki semua komponen tanggal/waktu dan kemudian dapat diformat untuk ditampilkan sesuai keinginan Anda.
String yang Anda hasilkan sebagai YYYYMM secara implisit dikonversi ke tanggal oleh sisipan, karena itu adalah tipe data kolom target. Konversi implisit itu menggunakan pengaturan NLS Anda, dan dari situ mengharapkan nilai yang lebih panjang agar sesuai dengan format tanggal NLS. String Anda tidak cocok dengan format implisit tersebut, yang menyebabkan kesalahan yang Anda lihat.
Jika Anda hanya tertarik pada tahun dan bulan maka yang paling dekat yang bisa Anda dapatkan adalah menyimpan tengah malam di awal bulan, yang bisa Anda dapatkan dengan 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;
Saya juga telah menghapus to_date
tambahan panggilan. Anda juga harus mempertimbangkan untuk beralih ke sintaks gabungan ANSI.
Anda kemudian dapat memformat c_date
sebagai YYYYMM untuk ditampilkan saat Anda menanyakannya, jika itu yang Anda butuhkan, melalui to_char
.