---
# System prepended metadata

title: Atividade Banco de Dados

---

# Atividade Banco de Dados

## Trigger

Um Trigger é um procedimento armazenado no banco de dados que é chamado automaticamente sempre que ocorre um evento especial no banco. 

Ele é importante quando temos a necessidade de realizar uma determinada ação de acordo com algum evento que acontecer. Ou seja, a partir desse "gatilho", realiza  alterações nas tabelas por meio de operações de inserção, exclusão e atualização de dados (insert, delete e update).

A sua estrutura é essa abaixo: 

```
CREATE TRIGGER [NOME DO TRIGGER]
ON [NOME DA TABELA]
[FOR/AFTER/INSTEAD OF] [INSERT/UPDATE/DELETE]
AS
```

### Exemplos

#### Trigger For

> FOR é o valor padrão do trigger e faz com o que o gatilho seja disparado junto da ação.

```
CREATE TRIGGER TGR_VENDAS_AD
ON VENDAS
FOR DELETE
AS
BEGIN
    DECLARE
    @VALOR  DECIMAL(10,2),
    @DATA   DATETIME

    SELECT @DATA = DATA, @VALOR = VALOR FROM DELETED

    UPDATE CAIXA SET SALDO_FINAL = SALDO_FINAL - @VALOR
    WHERE DATA = @DATA
END
GO
```

#### Trigger After

> AFTER faz com que o disparo se dê somente após a ação que o gerou ser concluída

```
CREATE TRIGGER production.trg_product_audit
ON production.products
AFTER INSERT, DELETE
AS
BEGIN
    //comando aqui
END
GO
```

#### Trigger Instead Of

> Serve para pular uma instrução INSERT, DELETE ou UPDATE de uma tabela e executar outras instruções definidas no trigger. A operação real de inserção, exclusão ou atualização não ocorre.

```
CREATE TRIGGER production.trg_vw_brands 
ON production.vw_brands
INSTEAD OF INSERT
AS
BEGIN
    SET NOCOUNT ON;
    INSERT INTO production.brand_approvals ( 
        brand_name
    )
    SELECT
        i.brand_name
    FROM
        inserted i
    WHERE
        i.brand_name NOT IN (
            SELECT 
                brand_name
            FROM
                production.brands
        );
END
GO
```

## Procedure

É uma **conjunto de comandos** em SQL que **podem ser executados de uma só vez**, como em uma função. Ele **armazena tarefas repetitivas** e aceita parâmetros de entrada para que a tarefa seja efetuada de acordo com a necessidade individual.

Sua importância se dá devido a capacidade de reduzir o tráfego na rede, melhorar a performance de um banco de dados, criar tarefas agendadas, diminuir riscos, criar rotinas de processsamento, e entre outros. 

Estrutura:

```
USE BancoDados
GO
CREATE PROCEDURE Busca --- Declarando o nome da procedure
@CampoBusca VARCHAR (20) --- Declarando variável (note que utilizamos o @ antes do nome da variável)
AS
SELECT Codigo, Descrição --- Consulta
FROM NomeTabela
WHERE Descricao = @CampoBusca --- Utilizando variável como filtro para a consulta
```

### Parâmetros de entrada
Os parâmetros de entrada permitem que o comando passe um valor de dados para Stored Procedure

### Parâmetros de saída
Os parâmetros de saída permitem que o Stored Procedure passe um valor de dados ou uma variável de cursor de volta para o comando. As funções definidas pelo usuário não podem especificar parâmetros de saída.

### Valores de retorno
Toda Stored Procedure retorna um código de retorno de inteiro ao comando. Se o procedimento armazenado não definir um valor explicitamente para o código de retorno, este será 0.


### Exemplos

#### Com parâmetro de entrada
**Declarando o Procedure:**
```
CREATE PROCEDURE Pc_HumanResources_SELECT
@DepartamentID smallint --Parametro de entrada 
AS 
SELECT * FROM HumanResources.Department WHERE DepartmentID = @DepartamentID
GO
```

**Comando para executar o Procedure:**
```
EXECUTE Pc_HumanResources_SELECT 2
```

#### Com parâmetro de saída

**Declarando o Procedure:**
```
CREATE PROCEDURE Pc_HumanResources_MAXID
@DepartamentID smallint OUTPUT --Parametro de saida 
AS 
SET @DepartamentID = (SELECT MAX(DepartmentID) FROM HumanResources.Department)
GO
```

**Comando para executar o Procedure:**
```
DECLARE @MAX smallint
EXECUTE Pc_HumanResources_MAXID @DepartmentID = @MAX OUTPUT

PRINT @MAX
```