sql >> Databáze >  >> RDS >> Oracle

Zachyťte hodnoty, které spouštějí DUP_VAL_ON_INDEX

V ideálním případě bych doporučil používat protokolování chyb DML. Například

Vytvořte tabulku protokolu chyb

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

Použít protokolování chyb 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;

Pro každý řádek, který selže, se data pro daný řádek zaznamenají do EMPLOYEE_ERR tabulky spolu s výjimkou. Poté můžete dotaz na tabulku chybových protokolů zobrazit všechny chyby, nikoli získat pouze první řádek, který selhal.

Pokud vytvoření tabulky chybových protokolů není možné, můžete přejít z SQL na PL/SQL pomocí hromadných operací. Bude to pomalejší, ale můžete použít SAVE EXCEPTIONS klauzule FORALL příkaz k vytvoření vnořené tabulky výjimek, kterou pak můžete iterovat.



  1. Jak vytvořit jednoduchý systém recenzí a hodnocení 5 hvězdiček?

  2. Jak importovat a exportovat soubory CSV pomocí PHP a MySQL

  3. LEFT JOIN nevrátí všechny záznamy z levé postranní tabulky

  4. Jak vytvoříme normalizovanou tabulku z deNormalizovaného textového souboru jedna?