Satu-satunya cara (saya tahu) untuk mengetahui baris mana yang menyebabkan masalah adalah dengan menggunakan fitur "log error into" Oracle. Dengan begitu insert
tidak akan mengeluarkan pengecualian dan setiap baris yang melanggar batasan apa pun akan ditulis ke dalam tabel kesalahan yang ditentukan.
Untuk melakukannya, Anda harus terlebih dahulu membuat tabel log yang menampung baris yang ditolak:
EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');
Itu akan membuat tabel bernama ERR$_BD_VEHICLES_TEMP
Kemudian jalankan ubah pernyataan Anda menjadi ini:
insert into bd_vehicles_temp
select *
from bd_vehicles_temp_1
LOG ERRORS REJECT LIMIT UNLIMITED;
Pernyataan akan berlanjut bahkan jika baris gagal memvalidasi batasan. Setelah pernyataan selesai, Anda dapat memeriksa isi tabel ERR$_BD_VEHICLES_TEMP
untuk baris yang melanggar batasan termasuk pesan kesalahan dan nilainya.
(Sunting):Jika Anda ingin berhenti pada kesalahan pertama (dan melihatnya di tabel log), maka tinggalkan REJECT LIMIT UNLIMITED
klausa.
Rincian lebih lanjut ada di manual:
- untuk DBMS_ERRLOG http://docs. oracle.com/cd/B28359_01/appdev.111/b28419/d_errlog.htm#CEGBBABI
- untuk klausa LOG ERRORS INTO:http ://docs.Oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm#BGBEIACB