triggers pl sql tutorial with example programs
Saiba tudo sobre Triggers em PL SQL, seus tipos, uso e vantagens:
No Transações PL SQL tutorial do PL / SQL series , aprendemos sobre as instruções COMMIT, ROLLBACK e SAVEPOINTS.
Neste artigo, exploraremos os gatilhos em PL SQL e suas vantagens, tipos e uso. Discutiremos como criar, disparar, habilitar e desabilitar os gatilhos PL / SQL com a ajuda de programas de exemplo.
Vamos começar com a discussão !!
O que você aprenderá:
Gatilhos em PL / SQL
Um programa armazenado que é disparado por padrão ou por alguns eventos é chamado de gatilho.
Um gatilho é executado devido às seguintes circunstâncias listadas abaixo:
- Por uma instrução DDL (Linguagem de Definição de Dados) como DROP, ALTER ou CREATE.
- Por uma instrução DML (Linguagem de Manipulação de Dados) como UPDATE, INSERT ou DELETE.
- Por uma ação de banco de dados como SHUTDOWN, STARTUP, LOGOFF e LOGON.
Um gatilho pode ser definido em um esquema, visualização ou banco de dados que possui um evento anexado.
Vantagens de gatilhos
Eles estão listados abaixo:
- Capacidade de impor integridade referencial.
- Capacidade de monitoramento.
- Capacidade de registrar e manter dados ao acessar tabelas.
- Capacidade de interromper transações que não são válidas.
- Capacidade de aplicar recursos de segurança.
- Capacidade de produzir valores de coluna derivados por padrão.
Usos de gatilhos
Eles estão listados abaixo:
- Previne transações impróprias.
- Acumula informações sobre o uso da mesa.
- Monitore informações críticas.
Tipos de gatilhos em PL / SQL
Os gatilhos podem ser categorizados com base em parâmetros. Os tipos de gatilhos estão listados abaixo:
# 1) Categorização no nível do acionador.
- Gatilho de nível ROW: Ele é executado para cada registro atualizado por uma instrução DML.
- STATEMENT Level trigger: Ele é executado apenas uma vez pela instrução do evento.
# 2) Categorização do tempo de disparo.
- ANTES de acionar: Ele é executado antes do evento específico que ocorreu.
- APÓS o gatilho: Ele é executado após o evento específico que ocorreu.
- EM VEZ DE gatilho: É um tipo especial de gatilho e é executado para cada registro atualizado por uma instrução DML.
# 3) Categorização do evento acionador.
- Gatilho DML: Ele é executado se um evento DML como UPDATE, INSERT ou DELETE for executado.
- Gatilho DDL: Ele é executado se um evento DDL como DROP, ALTER ou CREATE for executado.
- Gatilho DATABASE: Ele é executado se um evento de banco de dados como SHUTDOWN, STARTUP, LOGOFF e LOGON ocorrer.
Criar gatilhos
Sintaxe para criar um gatilho:
CREATE (OR REPLACE ) TRIGGER trigger_n BEFORE DELETE (OF column_n) ON table_n (REFERENCING OLD AS o NEW AS n) (FOR EACH ROW) WHEN (condition) DECLARE <> BEGIN < > EXCEPTION <> END;
Aqui,
- CRIAR (OU SUBSTITUIR) TRIGGER trigger_n - Isso é para criar, substituir ou atualizar um gatilho com um nome como trigger_n.
- DEPOIS DE - Isso serve para determinar a hora em que o gatilho será disparado. O INSTEAD OF serve para criar uma trigger que tenha uma view.
- DELETE - Isso é para executar as ações DML.
- (OF column_n) - Isso é para mencionar o nome da coluna que deve ser modificada.
- (ON table_n) - Isso é para mencionar o nome da tabela que está anexado ao gatilho.
- (REFERÊNCIA ANTIGO AS o NEW AS n) - Isso é para se referir aos valores antigos e novos pela instrução DML como UPDATE, INSERT ou DELETE.
- (PARA CADA LINHA) - Isso determina um gatilho de nível de linha, ou seja, o gatilho será disparado para cada linha modificada, caso contrário, o gatilho será disparado apenas uma vez quando a instrução SQL for executada, o que é conhecido como gatilho de nível de tabela.
- QUANDO (condição) - Isso fornece uma condição para as linhas para as quais o gatilho seria executado. Isso é aplicável apenas para gatilhos de nível de linha.
Vamos considerar novamente uma tabela que é chamada ALUNA .
Vamos agora criar um gatilho de nível de linha para a tabela STUDENT que seria executado pela instrução DML como UPDATE, INSERT ou DELETE nessa tabela. O gatilho irá calcular e mostrar a diferença de idade entre os valores atuais e anteriores.
Implementação de código para criação de gatilho:
CREATE OR REPLACE TRIGGER age_changes BEFORE DELETE OR INSERT OR UPDATE ON student FOR EACH ROW WHEN (NEW.CODE > 0) DECLARE age_diff number; BEGIN age_diff := :NEW.age - :OLD.age; dbms_output.put_line ('Prevoius age: ' || : OLD.age); dbms_output.put_line ('Current age: ' || : NEW.age); dbms_output.put_line ('Age difference: ' || age_diff); END; /
Saída do código acima:
O código acima possui algumas características importantes. Eles estão listados abaixo:
- Para um acionador de nível de tabela, os endereços OLD e NEW não estão disponíveis. Podemos usar essas referências para acionadores de nível de registro.
- Se quisermos aplicar outra consulta no mesmo gatilho, precisamos usar a palavra-chave AFTER como um gatilho que pode modificar uma tabela novamente somente após as modificações anteriores serem aplicadas corretamente.
- O gatilho discutido acima está sendo executado antes de qualquer ação DELETE, UPDATE ou INSERT na tabela. No entanto, também podemos projetar um gatilho que seja disparado em uma única operação também ( por exemplo, AFTER INSERT que irá executar a trigger sempre que um registro for inserido com a ajuda da operação INSERT na tabela).
Disparando gatilhos em PL SQL
Para disparar o gatilho acima, precisamos fazer qualquer operação DML como DELETE, INSERT ou UPDATE na tabela. Vamos inserir novamente alguns valores na tabela Student com a ajuda da consulta abaixo:
INSERT INTO STUDENT VALUES (4, 'MARY', 16, 97);
Assim que a operação INSERT for concluída na tabela do aluno, o gatilho age_changes é executado.
A saída do código da consulta:
Uma vez que um novo registro é criado e a idade anterior não está disponível, a idade anterior e Diferença de idade a computação é nula na saída acima.
Agora vamos modifique um registro com a instrução UPDATE com a ajuda da consulta abaixo:
UPDATE student SET age = age + 1 WHERE code = 7;
Assim que a operação UPDATE for concluída na tabela do aluno, o acionador age_changes é executado.
O resultado da consulta acima:
Cláusula NOVA E ANTIGA
Uma nova cláusula é usada para armazenar o novo valor para as colunas da tabela para a execução do gatilho. É usado em acionadores de nível de registro. Uma cláusula antiga é usada para armazenar o valor antigo para as colunas da tabela para a execução do gatilho. Também é usado em acionadores de nível de registro.
Assim, a cláusula nova e antiga é usada para conter e referir-se aos valores novos e antigos dentro de um corpo de gatilho.
Gatilho Composto
Um gatilho composto é usado para definir as operações para todos os pontos de controle dentro do corpo do gatilho. Fornece a possibilidade de mesclar todas as ações em momentos diferentes dentro de um corpo do acionador.
Os vários pontos de controle estão listados abaixo:
- Nível AFTER STATEMENT
- ANTES do nível ROW
- Nível APÓS LINHA
- BEFORE STATEMENT level
Desativar e ativar gatilho
Podemos habilitar e desabilitar um gatilho com a ajuda de uma instrução DDL ALTER.
Sintaxe:
ALTER TRIGGER trigger_n (ENABLE|DISABLE);
Aqui, trigger_n é o nome do gatilho que queremos habilitar ou desabilitar.
Agora vamos desabilitar o gatilho com a ajuda da consulta abaixo:
ALTER TRIGGER STUDENT_DETAILS DISABLE;
A saída do código da consulta:
Agora vamos habilitar o mesmo gatilho com a ajuda da consulta abaixo:
ALTER TRIGGER STUDENT_DETAILS ENABLE;
A saída do código da consulta:
Perguntas e respostas mais frequentes
P # 1) Quantos tipos de gatilhos existem no PL SQL?
Responda: Existem dois tipos de gatilhos em PL / SQL. Eles são gatilho de nível de linha e gatilho de nível de instrução.
P # 2) Que tipo de gatilho usa os qualificadores antigos e novos?
o melhor aplicativo espião para android
Responda: Os qualificadores antigos e novos podem ser usados apenas com gatilhos de nível de linha. Eles não são compatíveis com gatilhos de nível de instrução.
P # 3) Qual é a diferença entre o gatilho novo e o gatilho antigo?
Responda: Um novo gatilho fornece uma lista de novas versões dos objetos de registro. Um gatilho antigo fornece uma lista de versões antigas dos objetos de registro.
P # 4) O que é um gatilho de nível de linha no PL SQL?
Responda: Um acionador de nível de linha é acionado para uma linha apenas uma vez devido a um evento. Por exemplo, se a exclusão for considerada um evento de disparo para uma tabela, uma instrução de exclusão está afetando duas linhas, então o gatilho deve ser disparado duas vezes.
P # 5) O que é um gatilho? Explique com um exemplo.
Responda: Um gatilho é um procedimento armazenado que é disparado por padrão se ocorrer um incidente no banco de dados. Por exemplo, se uma linha é inserida em uma tabela ou se estamos modificando alguns valores na tabela.
Q # 6) Quais são os gatilhos posteriores?
Responda: Os gatilhos posteriores são disparados após a execução de uma instrução DML, mas antes da confirmação para o banco de dados. Também é capaz de reverter sua ação.
Conclusão
Neste tutorial, discutimos alguns conceitos básicos de Triggers em PL SQL que são essenciais para usá-los durante a programação. Cobrimos os seguintes tópicos listados abaixo:
- Gatilhos.
- Tipos de gatilhos.
- Várias operações em gatilhos.
<< PREV Tutorial | PRÓXIMO Tutorial >>