Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Criando um gatilho que lança uma exceção na inserção


Você deseja gerar uma exceção (o que impediria que a inserção fosse bem-sucedida)? Ou você deseja permitir que a inserção seja bem-sucedida e escreva uma string no dbms_output buffer que pode ou não existir e pode ou não ser mostrado a um humano executando a inserção?

Em ambos os casos, você desejará que este seja um gatilho em nível de linha, não um gatilho em nível de instrução, portanto, você precisará adicionar o for each row cláusula.
CREATE OR REPLACE TRIGGER person_id_trigg
  AFTER INSERT
  ON person
  FOR EACH ROW

Se você deseja gerar uma exceção
BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    RAISE_APPLICATION_ERROR( -20001, 
                             'The new ID value must have a length of 11' );
  END IF;
END;

Se você quiser potencialmente imprimir a saída, mas permitir o insert ter sucesso
BEGIN
  IF( length( :new.id ) <> 11 )
  THEN
    dbms_output.put_line( 'The new ID value must have a length of 11' );
  END IF;
END;

Claro, na realidade, você nunca usaria um gatilho para esse tipo de coisa. No mundo real, você usaria uma restrição.