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

Улавяне на стойности, които задействат DUP_VAL_ON_INDEX

В идеалния случай бих предложил да използвате регистриране на грешки в DML. Например

Създайте таблица с регистър на грешки

begin
  dbms_errlog.create_error_log( dml_table_name => 'EMPLOYEE',
                                err_log_table_name => 'EMPLOYEE_ERR' );
end;

Използване на регистриране на грешки в DML

BEGIN
  insert into employee( id )
    select id 
      from (select '01' id from dual
            union all
            select '02' from dual) 
    log errors into employee_err
        reject limit unlimited;
END;

За всеки ред, който е неуспешен, това ще регистрира данните за реда в EMPLOYEE_ERR таблица заедно с изключение. След това можете да направите заявка в таблицата с регистър на грешките, за да видите всички грешки, вместо да получите само първия ред, който е неуспешен.

Ако създаването на таблицата с регистър на грешките не е опция, можете да преминете от SQL към PL/SQL с групови операции. Това ще бъде по-бавно, но можете да използвате SAVE EXCEPTIONS клауза на FORALL израз, за ​​да създадете вложена таблица с изключения, която след това можете да повторите.



  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 и да зададете привилегии

  2. Sql сравнение на дата и час от двойна таблица

  3. DeleteDatabase не се поддържа от доставчика, Oracle с Entity Framework

  4. Oracle:Връща множество стойности във функция

  5. как да вмъкна текуща дата в поле ДАТА във формат dd/mm/yyyy в oracle