Единственият начин (за който знам) да разбера кой ред причинява проблема е да използвам функцията на Oracle "log errors into". По този начин insert
няма да генерира изключение и всеки ред, нарушаващ ограничение, ще бъде записан в посочената таблица за грешки.
За да направите това, първо трябва да създадете журнална таблица, която съдържа отхвърлените редове:
EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');
Това ще създаде таблица с име ERR$_BD_VEHICLES_TEMP
След това стартирайте change your statement to this:
insert into bd_vehicles_temp
select *
from bd_vehicles_temp_1
LOG ERRORS REJECT LIMIT UNLIMITED;
Изявлението ще продължи дори ако ред не успее да потвърди ограниченията. След като операторът приключи, можете да проверите съдържанието на таблицата ERR$_BD_VEHICLES_TEMP
за редовете, които са нарушили ограничение, включително съобщението за грешка и стойностите.
(Редактиране):Ако искате да спрете при първата грешка (и да видите това в таблицата с регистрационни файлове), тогава пропуснете REJECT LIMIT UNLIMITED
клауза.
Повече подробности има в ръководството:
- за DBMS_ERRLOG http://docs. oracle.com/cd/B28359_01/appdev.111/b28419/d_errlog.htm#CEGBBABI
- за клаузата LOG ERRORS INTO:http ://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm#BGBEIACB