Oracle
 sql >> Database >  >> RDS >> Oracle

Acquisisci i valori che attivano DUP_VAL_ON_INDEX

Idealmente, suggerirei di utilizzare la registrazione degli errori DML. Ad esempio

Crea la tabella del registro degli errori

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

Utilizza la registrazione degli errori 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;

Per ogni riga che non riesce, questo registrerà i dati per la riga in EMPLOYEE_ERR tabella insieme all'eccezione. È quindi possibile eseguire una query sulla tabella del registro degli errori per visualizzare tutti gli errori anziché ottenere solo la prima riga che non è riuscita.

Se la creazione della tabella del registro degli errori non è un'opzione, è possibile passare da SQL a PL/SQL con operazioni di massa. Sarà più lento ma potresti usare SAVE EXCEPTIONS clausola del FORALL istruzione per creare una tabella nidificata di eccezioni su cui è possibile eseguire l'iterazione.