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

Vytváření triggeru, který vyvolá výjimku na insert

Chcete vyvolat výjimku (která by zabránila úspěšnému vložení)? Nebo chcete povolit vložení, aby bylo úspěšné a zapsat řetězec do dbms_output pufr, který může nebo nemusí existovat a může nebo nemusí být ukázán člověku, který spouští vložku?

V obou případech budete chtít, aby se jednalo o spouštěč na úrovni řádku, nikoli spouštěč na úrovni příkazu, takže budete muset přidat for each row doložka.

CREATE OR REPLACE TRIGGER person_id_trigg
  AFTER INSERT
  ON person
  FOR EACH ROW

Pokud chcete vyvolat výjimku

BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    RAISE_APPLICATION_ERROR( -20001, 
                             'The new ID value must have a length of 11' );
  END IF;
END;

Pokud chcete potenciálně tisknout výstup, ale povolte insert uspět

BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    dbms_output.put_line( 'The new ID value must have a length of 11' );
  END IF;
END;

Samozřejmě, ve skutečnosti byste nikdy nepoužili spoušť pro takové věci. V reálném světě byste použili omezení.




  1. Rozdělte hodnoty oddělené čárkou do jednotlivých řádků

  2. Jak přidat omezení cizího klíče do existující tabulky v SQL Server (T-SQL)

  3. Předání databázového připojení odkazem v PHP

  4. Jak přeformulovat sql dotaz