Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle JDBC:Как да разбера кой ред хвърля ограничение за уникален ключ?

Единственият начин (за който знам) да разбера кой ред причинява проблема е да използвам функцията на 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 клауза.

Повече подробности има в ръководството:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхранена процедура на Oracle без параметър, използвайки Nhibernate

  2. Oracle:OALL8 е в непоследователно състояние

  3. Модел на наблюдател в Oracle

  4. Неяснота в левите съединения (само oracle?)

  5. Сумиране на търсения в SSRS