O gatilho define um conjunto de ações a serem executadas quando ocorre um evento de banco de dados em uma determinada tabela. O evento de banco de dados é uma operação de exclusão, inserção ou de atualização. Por exemplo, se for definido um gatilho para exclusão em uma determinada tabela, a ação do gatilho ocorre sempre que se remove uma ou mais linhas da tabela.
Junto com as restrições, os gatilhos podem ajudar a impor regras de integridade com ações como exclusões ou atualizações em cascata. Os gatilhos também podem realizar várias funções como emitir alertas, atualizar outras tabelas, enviar e-mail, e outras ações úteis.
Pode ser definido qualquer número de gatilhos para uma única tabela, inclusive vários gatilhos para a mesma tabela para o mesmo evento.
Pode ser criado gatilho em qualquer esquema, exceto os começados por SYS. O gatilho não precisa residir no mesmo esquema da tabela para a qual é definido.
Se for especificado um nome de gatilho qualificado, o nome do esquema não poderá começar por SYS.
Os gatilhos são definidos para BEFORE (antes) ou AFTER (depois).
O gatilho é disparado por um dos seguintes eventos do banco de dados,
dependendo de como foi definido
(consulte
Pode ser definido qualquer número de gatilhos para um determinado evento em uma determinada tabela. No caso de gatilho para atualização podem ser especificadas as colunas.
Muitas instruções-SQL-engatilhadas necessitam fazer referência aos dados que estão sendo alterados no momento pelo evento de banco de dados que causou o disparo do gatilho. A instrução-SQL-engatilhada pode necessitar fazer referência aos valores novos (pós-alteração ou "após").
O
Por exemplo, se for adicionada a seguinte cláusula à definição do gatilho:
pode-se então fazer referência a este nome de correlação na
instrução-SQL-engatilhada:
As variáveis de transição OLD e NEW são mapeadas a um
java.sql.ResultSet de uma única linha.
Para os gatilhos de instrução, as tabelas de transição servem como identificador de tabela para a instrução-SQL-engatilhada ou para a qualificação do gatilho. A cláusula de referência permite fornecer um nome de correlação ou aliás para estas tabelas de transição especificando OLD_TABLE/NEW_TABLE AS nome-da-correlação
Por exemplo:
permite utilizar este novo identificador (HOTÉIS_EXCLUÍDOS) na
instrução-SQL-engatilhada:
As tabelas de transição antiga e nova são mapeadas a um
java.sql.ResultSet com cardinalidade equivalente ao número de linhas
afetadas pelo evento do gatilho.
A cláusula REFERENCING pode designar apenas uma correlação ou identificador para novo, e apenas uma correlação ou identificador para antigo. Os gatilhos de linha não podem designar um identificador para a tabela de transição, e os gatilhos de instrução não podem designar uma correlação para as variáveis de transição.
Deve ser especificado se o gatilho é um gatilho de instrução ou um gatilho de linha:
O gatilho de instrução dispara uma vez por evento de gatilho, independentemente de alguma linha ser modificada pelo evento de inserção, atualização ou exclusão.
O gatilho de linha dispara uma vez para cada linha afetada pelo evento de gatilho. Se nenhuma linha for afetada, o gatilho não vai disparar.
A ação definida pelo gatilho é chamada de instrução-SQL-engatilhada
(na
A instrução-SQL-engatilhada pode fazer referência a outros objetos do banco de dados além da tabela para a qual o gatilho é declarado. Se algum destes objetos for removido, o gatilho será invalidado. Se na próxima execução a recompilação do gatilho não for bem-sucedida, a chamada lançará uma exceção e a instrução que causou o disparo será desfeita.
Para obter mais informações sobre instrução-SQL-engatilhada deve ser
consultado o
Quando ocorre um evento de banco de dados que dispara um gatilho, o
Quando são definidos vários gatilhos para o mesmo evento de banco de dados, para a mesma tabela, e para o mesmo instante (antes ou depois), os gatilhos são disparados na ordem em que foram criados.
A profundidade de recursividade máxima de gatilho é 16.
As funções de sistema especiais que retornam informação sobre a hora corrente ou o usuário corrente são avaliadas quando o gatilho dispara, e não quando o gatilho é criado. Estas funções incluem: