sql >> Database >  >> RDS >> Oracle

Waarden vastleggen die DUP_VAL_ON_INDEX activeren

In het ideale geval zou ik willen voorstellen om DML-foutregistratie te gebruiken. Bijvoorbeeld

Maak de foutenlogboektabel

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

Gebruik DML-foutregistratie

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;

Voor elke rij die mislukt, worden de gegevens voor de rij geregistreerd in de EMPLOYEE_ERR tafel samen met de uitzondering. U kunt dan de foutenlogboektabel opvragen om alle fouten te zien in plaats van alleen de eerste rij te krijgen die mislukt is.

Als het maken van de foutenlogboektabel geen optie is, kunt u met bulkbewerkingen van SQL naar PL/SQL gaan. Dat zal langzamer zijn, maar u kunt de SAVE EXCEPTIONS . gebruiken clausule van de FORALL statement om een ​​geneste tabel met uitzonderingen te maken die u vervolgens kunt herhalen.



  1. Zoek in 300 miljoen adressen met pg_trgm

  2. Voeg de ordinale indicator toe aan een datum in PostgreSQL

  3. Er is een fout op transportniveau opgetreden bij het ontvangen van resultaten van de server

  4. Oracle ODP.Net met Entity Framework 6 - Entity framework database-compatibele provider kon niet worden gevonden