Introdução aos gatilhos em PL / SQL

Os gatilhos de banco de dados são o código PL / SQL que é executado com base em um evento no banco de dados, como INSERT, UPDATE, Alter, Drop, Login, Logoff etc. Os gatilhos de banco de dados nos ajudam a manter os códigos SQL simples e curtos. Os gatilhos de banco de dados são úteis para gerenciar todas as alterações e acompanhar todas essas alterações usando Atualizar, Excluir, Alterar, login, Logoff etc. no Banco de Dados, esquemas de Banco de Dados e suas tabelas.

Temos 3 tipos de gatilhos de banco de dados:

1. DML (Data Manipulation Language): os gatilhos DML são executados em INSERT, UPDATE & DELETE nas tabelas.

2. DDL (Data Definition Language): Este gatilho é executado em Criar, Alterar, Soltar, Analisar, Auditar, Conceder, etc.

3. Evento do banco de dados : Execução de gatilhos de eventos do banco de dados com base em LOGON, LOGOFF, Suspend, inicialização do banco de dados, encerramento do banco de dados e outros erros do banco de dados.

Aqui está mais uma característica do DB Triggers:

Um acionador de banco de dados: é um código PL / SQL vinculado a uma exibição de tabela ou evento de banco de dados.
Executa com base na atividade do banco de dados

  • Antes / Depois, INSERT, UPDATE, DELETE.
  • Executado uma vez por eventos de acionamento ou uma vez por linha afetada pelo acionador.

Execute com base na inicialização / desligamento / erro do sistema / desligamento da carga de dados.

Como criar gatilhos em PL / SQL?

Aqui estão as etapas a seguir para criar gatilhos no PL / SQL

1. Disparadores DML

Esse gatilho é dividido em dois tipos:

  • Após gatilhos / Para gatilhos
  • Em vez de gatilhos

APÓS o disparo é acionado após a ação de disparo. As instruções DELETE, UPDATE e INSERT são um exemplo dos gatilhos After.
Em vez de gatilhos atua em vez da ação. As instruções DELETE, UPDATE e INSERT também fazem parte.

Exemplo:

Usaremos as tabelas Employee e EmployeeAudit para nossos exemplos.

Script SQL para criar uma tabela Employee:

CREATE TABLE Employee
(
Id int Primary Key,
Name nvarchar(30),
Salary int,
Gender nvarchar(10),
DepartmentId int
)
Insert data into Employee table
Insert into Employee values (1, 'Prakash', 5000, 'Male', 3)
Insert into Employee values (2, 'Robert', 3400, 'Male', 2)
Insert into Employee values (3, 'Anji', 6000, 'Female', 1)

Tabela de funcionários

Script SQL para criar a tabela EmployeeAudit:

CREATE TABLE EmployeeAudit
(
Id int identity(1, 1) primary key,
AuditData nvarchar(1000)
)

capturaremos o ID e a data e hora Sempre que um novo funcionário for adicionado na tabela EmployeeAudit. Este é o programa mais fácil para definir AFTER TRIGGER para o evento INSERT.

2. Disparadores DDL

É usado principalmente para impedir alterações específicas no esquema do banco de dados

Sintaxe

CREATE TRIGGER trigger_name
ON (DATABASE | ALL SERVER)
(WITH ddl_trigger_option) FOR (event_type | event_group )
AS (sql_statement)

trigger_name é para especificar o nome definido do acionador após as palavras-chave CREATE TRIGGER. Além disso, você não precisa especificar um esquema de banco de dados porque não está relacionado a uma tabela ou exibição de banco de dados real.

Banco de dados | Todos os servidores: se o gatilho disparar nos eventos com escopo do servidor, poderemos usar o ALL SERVIDOR. Use DATABASE se o gatilho disparar em eventos com escopo no banco de dados

ddl_trigger_option: especifica a cláusula ENCRYPTION e / ou EXECUTE AS.

event_type | event_group: O event_group é um grupo de eventos event_type, como DDL_TABLE_EVENTS & O event_type indica um evento DDL que causa o acionamento do gatilho, como ALTER_TABLE, CREATE_TABLE, etc.

Exemplo:

Execute a execução em resposta ao evento CREATE_TABLE DDL.

CREATE TRIGGER MyFirstTrigger
ON Database
FOR CREATE_TABLE
AS
BEGIN
Print 'New table created'
END

Verifique se o gatilho foi criado na pasta Gatilho do banco de dados e, se você não o conseguir, atualize a pasta (Gatilho do banco de dados).

3. Evento do Banco de Dados

Pode ser usado para qualquer evento do banco de dados, como LOGON, LOGOFF, Suspend, inicialização do banco de dados, encerramento do banco de dados

Sintaxe:

CREATE (OR REPLACE) TRIGGER trigger_name
(BEFORE | AFTER) (database_event) ON (DATABASE | SCHEMA)
DECLARE
…some code…
END;

trigger_name é para especificar o nome definido do acionador após as palavras-chave CREATE TRIGGER.

O evento database_event basicamente ocorre em bancos de dados, como logoff, logon, desligamento etc. Podemos selecionar qual banco de dados ou esquema esse gatilho funcionará.

Exemplo: Gatilho de Logoff

Aqui podemos demonstrar o acionador de eventos do banco de dados LOGOFF. Esse gatilho criará um registro em uma tabela (logoff) quando alguém se desconectar.
Este gatilho registrará o nome do usuário e o horário da desconexão.

Criando uma tabela de logoff:

create table logoff_table (
who varchar2(30),
when date
);

Criando um gatilho de logoff:

create trigger trg_logoff
before logoff on database
begin
insert into logoff_table values(sys_context('userenv', 'session_user'), sysdate);
end;
/

Aqui no gatilho acima, criamos o Tigger para monitorar o logoff de qualquer usuário. Esse gatilho será executado após o logoff dos usuários do banco de dados. A tabela de logoff armazenará alguns detalhes Nome do usuário e é hora de logoff (Você pode decidir os detalhes conforme o requisito).

Da mesma forma, podemos criar outro gatilho que monitore e armazene os Detalhes de Login de qualquer banco de dados específico. Os gatilhos de eventos do banco de dados são úteis na solução de problemas.
Todos os nomes de tabelas são específicos de requisitos, podemos alterar seus nomes conforme os requisitos.

Vantagem de gatilhos em PL / SQL

  • Bom para trilhas de auditoria.
  • Bom para manipular dados.
  • Imponha esquemas de segurança complexos.
  • Aplicar regras de negócios.
  • Impedir alterações no banco de dados e no esquema.
  • O código PL / SQL é mais curto usando gatilhos.
  • Acompanhe as alterações nas tabelas de banco de dados, esquema e banco de dados.
  • O gerenciamento de registros de ação no banco de dados é útil na solução de problemas.
  • Não há necessidade de verificar manualmente as alterações no banco de dados, o gatilho sempre executa uma ação em uma ocorrência de evento específica.

Conclusão

Aqui está este capítulo, aprendemos sobre tipos de gatilhos, como gatilhos de eventos DDL, DML e banco de dados. Também aprendemos enquanto um gatilho DDL pode ser usado para INSERT, UPDATE, DELETE etc. Instruções e gatilhos DML são projetados para criar, alterar, descartar etc. nas tabelas do banco de dados, mas os gatilhos de eventos do banco de dados funcionam quando há logoff, Suspender, ação de Inicialização do Banco de Dados realizada no Banco de Dados.

A sintaxe de cada gatilho é fácil de entender e pode ser convertida em código PL / SQL facilmente. O programa PL / SQL, como o logoff acionado, forneceu uma visão geral de como o acionador do banco de dados funcionará, caso algum usuário efetue logoff do banco de dados. No DML Trigger, demonstramos como o AFTER Trigger funcionará assim que houver uma nova entrada para qualquer novo funcionário. Os gatilhos DDL são úteis para impedir alterações específicas no banco de dados e no esquema.

Artigos recomendados

Este é um guia para acionadores em PL / SQL. Aqui discutimos como criar gatilhos em PL / SQL com exemplos e vantagens. Você também pode consultar o seguinte artigo.

  1. Cursores em PL / SQL
  2. Instrução CASE em PL / SQL
  3. O que é PL / SQL?
  4. Comandos PL / SQL
  5. Chave primária vs chave estrangeira | Principais diferenças