sql >> Databasteknik >  >> RDS >> Oracle

Fånga värden som utlöser DUP_VAL_ON_INDEX

Helst skulle jag föreslå att du använder DML-felloggning. Till exempel

Skapa felloggtabellen

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

Använd DML-felloggning

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;

För varje rad som misslyckas kommer detta att logga data för raden i EMPLOYEE_ERR tabell tillsammans med undantaget. Du kan sedan fråga felloggtabellen för att se alla fel istället för att bara få den första raden som misslyckades.

Om att skapa felloggtabellen inte är ett alternativ kan du flytta från SQL till PL/SQL med bulkoperationer. Det kommer att gå långsammare men du kan använda SAVE EXCEPTIONS satsen i FORALL för att skapa en kapslad tabell med undantag som du sedan kan iterera över.



  1. FEL #1054 - Okänd kolumn 'program_id' i 'NEW

  2. Så här går du runt ORA-02014:kan inte välja FÖR UPPDATERING från vy med DISTINCT, GROUP BY, etc

  3. Slå samman två tabeller och filtrera dem med where-satsen

  4. Postgres pg_try_advisory_lock blockerar alla poster