Você está na página 1de 29

11/09/2015

Jair Segura Júnior


- Análise e Desenvolvimento de Sistemas;

- Colaborador MEGA desde 2009;

- Atendimento Folha de Pagamento;

- Desenvolvimento Folha de Pagamento;

- Desenvolvimento MCQ/MAT;

- Desenvolvimento Materiais e Contratos;

- Administração de Banco de Dados;

- Pesquisas e compartilhamentos no Confluence.

Bom dia!

1
11/09/2015

Regra de Convivência
Horário do Treinamento:
Início: 09:00

Coffee Break: 10:30 – duração: 15 min.

Almoço: 13:15 – Retorno: 14:15

Coffee Break: 15:30 – duração: 15 min.

Término: 17h

Regra de Convivência
Avaliação
Vocês serão avaliados durante todo o treinamento, através de:

● Participação

● Exercícios

Regra de Convivência
•Não utilizar internet (e-mail, talk, skype ou qualquer outra
ferramenta diferente que seja referente ao treinamento).

•Coloque o celular no silencioso.

2
11/09/2015

Objetivo
Adquirir habilidades básicas para manipulação de
dados em um banco de dados relacional.

Conhecimento em funções e sintaxes utilizadas no


banco de dados Oracle.

Análise de incidentes mais assertiva junto aos clientes.

PL/SQL
O que é;
Como utilizar a ferramenta;
Vantagens;
Tipos de Objetos;
Bloco PL/SQL;
Comentários;
Declarações e tipos de variáveis;
Declaração e tratamento de exceções;
Utilização de IF;
Declaração e utilização de cursores;
Operadores Aritméticos;
Dependência de Objetos;
Erros de compilação.

O que é PL/SQL

PL/SQL (Procedural Language/Structured Query Language) é uma


extensão de linguagem de procedimentos desenvolvida pela Oracle para a
SQL Padrão, para fornecer um modo de executar a lógica de
procedimentos no banco de dados.

3
11/09/2015

O que é PL/SQL

O que é PL/SQL

Todo SGBD (Sistema Gerenciador de Banco de Dados) possui uma


linguagem de programação. O SQLServer possui a Transaction SQL, DB2
possui a SQL PL e a Oracle possui o PL/SQL.

Essas linguagens foram criadas para atender a necessidade de se criar


programas dentro do próprio banco de dados e são extremamente úteis.

Uma das vantagens dessas linguagens é permitir que programas sejam


escritos e armazenados dentro do próprio banco, permitindo a reutilização.

Banco de Dados

Antigamente, empresas armazenavam seus registros em arquivos físicos,


organizados em pastas.

Recuperar essas informações e manter uma grande quantidade de


arquivos devidamente organizados, era uma tarefa muito custosa.

4
11/09/2015

Banco de Dados

Os arquivos físicos evoluíram para arquivos digitais, facilitando a


manipulação dos dados.

Esses arquivos eram acessados por meio de um “software simples”, onde


operações de inclusão, edição e exclusão podiam ser realizadas. Porém,
era apenas uma versão melhorada dos arquivos físicos.

Banco de Dados

Surgiu a necessidade de relacionar objetos.

Banco de Dados

Na década de 70, o pesquisador britânico Edgar Frank


Codd, da IBM, apresentou o conceito de banco de dados
relacional, onde informações são inseridas e recuperadas
de forma simples e eficiente.

5
11/09/2015

Problema!!!

PL/SQL – Como usar

• Conexão

• Browser

• Window List

• PL/SQL Beautifier

• Commit

• RollBack

Tabelas

É a unidade básica de armazenamento de dados sendo


composta por linhas e colunas:

• Coluna : é uma parte de uma Tabela que contém dados do mesmo


tipo e que, semanticamente, são de mesma natureza.

• Linha : corresponde a um registro de uma Tabela. Também


conhecida como TUPLA (Sequencia ordenada de elementos).

6
11/09/2015

Problema!!!
Vamos criar as tabelas para solucionar nosso problema?

Create table Owner.Nome_Tabela

( Nome_Campo Tipo_Campo,
Nome_Campo2 Tipo_Campo
);

Tipos de campos?

Constraints
Regra de integridade:

Corresponde a uma regra de integridade aplicada sobre uma


determinada Tabela. A constraint é definida e mantida no banco
de dados Oracle.
Em linhas gerais, são utilizadas para prevenir entrada inválida de
dados nas Tabelas. Ou seja, implementam regras a nível de Tabela
que são verificadas toda vez que uma linha é inserida, alterada ou
excluída na tabela.
Se essa regra não for respeitada, a operação não é concluída no
banco de dados.

Primary Key
Chaves primárias" (em inglês, "Primary Keys" ou "PK"):

Sob o ponto de vista de um banco de dados relacional, referem-se


aos conjuntos de um ou mais campos, cujos valores, considerando a
combinação de valores de todos os campos da tupla, nunca se
repetem e que podem ser usadas como um índice para os demais
campos da tabela do banco de dados. Em chaves primárias, não pode
haver valores nulos nem repetição de tuplas.

Dessa forma podemos ter Chaves Primárias Simples e Chaves


Primárias Compostas. A diferença é que a Chave Primária Simples é
composta por um único campo da tabela, já a Chave Primária
Composta pode possuir dois ou mais campos da tabela.

7
11/09/2015

Foreign Key

Foreign Key (Chave Estrangeira):

Uma chave estrangeira é um campo, que aponta para a chave


primária de outra tabela ou da mesma tabela. Ou seja, passa a existir
uma relação entre tuplas de duas tabelas ou de uma única tabela.

A finalidade da chave estrangeira é garantir a integridade dos dados


referenciais, pois apenas serão permitidos valores que supostamente
vão aparecer na base de dados.

Check Constraint
Check Constraint (Restrição de Checagem):

A Check Constraint é usada para limitar os valores que podem ser


atribuídos à uma coluna.

Uma Check Constraint trabalha associada a uma tabela e contém


uma condição de verificação que deve ser cumprida para cada
registro da tabela.

Toda vez que for inserido ou atualizado um registro, o gerenciador de


banco de dados verifica as regras existentes para garantir que os
novos valores desses registros estejam corretos.

Problema!!!
Vamos criar as constraints para nossas tabelas?

PK?

FK?

CK?

8
11/09/2015

Problema!!!
Vamos dar uma carga de dados em nossas tabelas?

Insert: Responsável por inserir um ou mais registros em uma tabela,


porém, vale lembrar que nesse momento, todas as restrições (PK,
AK, CK e FK) definidas na tabela devem ser respeitadas.

INSERT INTO <nome_tabela> [(colunas_destino)]


VALUES (valores)

Transação

O que é uma transação?

Problema!!!
Vamos atualizar informações em nossas tabelas?

Update: Responsável por alterar um ou mais registros de uma


tabela, dependendo de suas condições e é claro respeitando as
restrições da tabela.

UPDATE <nome_tabela>
SET <nome_coluna> = <novo_valor>
[, <nome_coluna1> = <novo_valor1>]
[WHERE <condição>]

9
11/09/2015

Problema!!!
Vamos remover informações de nossas tabelas?

Delete: Responsável por remover um ou mais registros de uma


tabela.

DELETE FROM <nome_tabela>


[WHERE <condição>]

Problema!!!
Vamos visualizar informações de nossas tabelas?

Select: Recupera linhas do banco de dados e permite a seleção de


uma ou várias linhas ou colunas de uma ou várias tabelas.

SELECT * -- use os nomes das colunas no lugar do asterisco, caso


necessite de poucas informações [nome_coluna1, nome_coluna1]
FROM nome_da_tabela
[WHERE condição]

Joins
Como relacionar informações entre tabelas?

10
11/09/2015

Joins
INNER JOIN

Joins
LEFT JOIN

Joins
RIGHT JOIN

11
11/09/2015

Vamos otimizar?

Bloco PL/SQL

Um bloco PL/SQL é uma unidade sintática que pode conter código de


programa, declarações de variáveis, handlers de erro, procedimento,
funções e até mesmo outros blocos PL/SQL.

Bloco PL/SQL
1. Declarativa
Indicada pela palavra chave DECLARE, é a parte inicial do bloco e reservada
para declaração de variáveis, constantes, tipos, exceções definidas por
usuários, cursores e subrotinas.

2. Executável
Contém os comandos SQL e PL/SQL que irão manipular dados do banco e é
iniciada pela palavra chave BEGIN. Quando o bloco não possui a sessão de
exceções, a seção executável é finalizada pela palavra chave END, seguida
do ponto e vírgula.
• É a única sessão obrigatória em um bloco PL/SQL.

3. Exceções
Indicada pela palavra chave EXCEPTION, onde todas as combinações de
possíveis erros esperados são inseridos.

12
11/09/2015

Exemplo Bloco PL/SQL

declare
vTeste pls_integer;
begin
select 1
into vTeste
from dual;
exception
when NO_DATA_FOUND then
vTeste := 0;
end;

Problema!!!
Como um bloco PL/SQL pode nos ajudar?

Seguindo o exemplo anterior, vamos informar ao usuário caso o livro


esteja alugado na data atual.

É possível?

Comentários PL/SQL

Os comentários são utilizados para documentar cada fase do código e


ajudar no debug.

Os comentários são informativos e não alteram a lógica ou o


comportamento do programa. Quando usados de maneira eficiente,
os comentários melhoram a leitura e as futuras manutenções do
programa.

Em PL/SQL, os comentários podem ser indicados de duas formas:


Usando os caracteres -- no início da linha a ser comentada;
Concentrando o texto (ou código) entre os caracteres '/*' e '*/'.

13
11/09/2015

Comentários PL/SQL

DECLARE
-- Declaração de variáveis
BEGIN
/*O programa não executa nada*/
NULL;
EXCEPTION --Aqui inicia a sessão e exceções
/*A área de exceção também não faz nada*/
NULL;
END;

Declaração de variáveis

Devemos sempre declarar as variáveis na Sessão Declarativa antes


de referenciá-las nos blocos PL/SQL.

Sintaxe:
Nome_Variável TIPO [atribuição opcional];

Declaração de variáveis

declare
vTeste pls_integer; --Declaração sem atribuição
vTeste2 pls_integer := 10; -- Declaração com atribuição
vTeste3 pls_integer default 20; -- Declaração com atribuição default
begin
select 1
into vTeste
from dual;
exception
when NO_DATA_FOUND then
vTeste := 0;
end;

14
11/09/2015

Declaração ancorada

Variáveis ancoradas referem-se ao uso da declaração %TYPE. O que


o PL/SQL faz, é ancorar o tipo de dado de uma variável àquele de
uma outra estrutura de dados, geralmente de uma coluna de uma
tabela.

O benefício de tipos de dados de variáveis ancoradas em programas


PL/SQL com colunas de bancos de dados é que quando as
declarações base mudam, o código PL/SQL não precisa ser alterado.

Variáveis ancoradas

declare
vTeste MGADM.EST_COTACAO.COT_IN_CODIGO%Type;
begin
select 1
into vTeste
from dual;
exception
when NO_DATA_FOUND then
vTeste := 0;
end;

Declarações PL/SQL
declare
vDataNasc DATE;
vCodDepto NUMBER(2) NOT NULL := 10;
vCidade VARCHAR2(30) := 'ITU';
vPI CONSTANT NUMBER := 3.1415;
vTeste pls_integer;
begin
select 1
into vTeste
from dual;
exception
when NO_DATA_FOUND then
vTeste := 0;
end;

15
11/09/2015

Operadores

Operadores aritméticos:

• Soma: +
• Subtração: -
• Divisão: /
• Multiplicação: *

Operadores
Operadores de comparação:

• Diferente: <>
• Igual que: =
• Maior que: >
• Menor que: <
• Maior ou igual que: >=
• Menor ou igual que:<=
• Entre: BETWEEN (Compara se o valores esta entre dois valores)
• Concatenar: ||
• Parecido: LIKE
• Negação: not
• Dentro do: IN
• E: AND
• Ou: OR

Problema!!!
Como um Operador pode nos ajudar?

Em qual município o livro está?

Quem estava com o livro entre dia 05 e 10?

Quem estava com o livro no dia 05?

O que mais podemos usar?

16
11/09/2015

Exceções PL/SQL
Eventualmente o servidor Oracle ou o aplicativo do usuário causa um erro
durante o processamento em runtime. Tais erros podem surgir de falhas de
hardware ou rede, erros lógicos de aplicativo, erros de integridade de dados e
de muitas outras fontes.

Esses erros são conhecidos como exceções, ou seja, esses eventos


indesejados são exceções do processamento normal e esperado.

Geralmente, quando um erro ocorre, o processamento do bloco PL/SQL é


imediatamente encerrado. O processamento corrente não é concluído. A
Oracle permite que você esteja preparado para esses erros e grava lógica nos
programas para lidar com os erros e permitir que o processamento continue.
Essa lógica gravada para gerenciar os erros é conhecida como código de
tratamento de exceções.

Exceções PL/SQL
Existem três tipos
Erros predefinidos de exceções na PL/SQL:
da Oracle:

O servidor Oracle define vários erros com nomes padrão. Embora todo
erro Oracle tenha um número, um erro deve ser referenciado pelo
nome.
A PL/SQL tem alguns erros e exceções comuns da Oracle
predefinidos, os quais incluem o seguinte:
Exceções Descrição
no_data_found O SELECT de linha única não retornou dados.
too_many_rows O SELECT de linha única retornou mais de uma linha.

zero_divide Ocorreu uma tentativa de dividir por zero.

Problema!!!
Como podemos simular uma exceção?

E se não encontrarmos o livro?

E se a data de previsão de entrega não foi preenchida?

O que mais podemos usar?

17
11/09/2015

Exceções PL/SQL

Erros não definidos da Oracle:

Conseguimos capturar erros não definidos pelo Servidor Oracle


declarando-os primeiro ou usando o manipulador OTHERS.

Others: Uma declaração que captura um erro que não foi detectado
nas exceções anteriores.

Exceções PL/SQL

Erros definidos pelo usuário:

Um usuário pode levantar explicitamente uma exceção usando o


comando RAISE.

Esse procedimento deve ser usado apenas quando a Oracle não


levanta sua própria exceção ou quando o processamento não é
desejado ou é impossível de ser completado.

Exceções PL/SQL
DECLARE
-- Declarar exceção
eRegistroInexistente exception;
BEGIN
-- Excluir agente
DELETE mgadm.est_recebimento r
WHERE r.agn_in_codigo = 89898989;
-- Se agente não existe, gerar exceção
IF SQL%NOTFOUND THEN
raise eRegistroInexistente;
END IF;
-- Validar exclusão
COMMIT;
EXCEPTION
-- Se registro não existe, informa usuário
WHEN eRegistroInexistente THEN
ROLLBACK;
dbms_output.put_line('Agente 1000 não existe!'||chr(10)||‘ 0 registro foi excluído.');
END;

18
11/09/2015

Declarações IF
IF:
A declaração IF permite avaliar uma ou mais condições, como em
outras linguagens.
A sintaxe de uma declaração IF no PL/SQL é a seguinte:

IF <condição> THEN
<comandos a serem executados>
END IF;

Nessa sintaxe, condição é a condição que você quer verificar. Se a


condição for avaliada como TRUE, ou seja, verdadeira, os comandos
de execução serão executados.

Declarações IF
declare
VQTDEAGENTES integer;
begin
-- Recuperar quantidade de Agentes
select count(*) into VQTDEAGENTES from GLO_AGENTES;

-- Se não existir agentes gera uma exceção


if VQTDEAGENTES = 0 then
RAISE_APPLICATION_ERROR(-20100,
'Não existem agentes cadastrados');
end if;
end;

Problema!!!
E se?

E se o livro estiver alugado?

E se não houver o livro desejado?

E se o colaborador não possuir cadastro?

O que mais podemos usar?

19
11/09/2015

Declarações IF..THEN..ELSE
No exemplo anterior você não se importou com os resultados quando existem
agentes. A declaração IF...THEN...ELSE permite processar uma série de
declarações abaixo de ELSE se a condição for falsa.

A sintaxe da declaração IF...THEN...ELSE é:

IF <condição> THEN
<comandos a serem executados para condição verdadeira>
ELSE
<comandos a serem executados para condição verdadeira>
END IF;

Nessa sintaxe, se a condição for FALSE, é executado os comandos abaixo de


ELSE.

Declarações IF..THEN..ELSE
declare
VQTDEAGENTES integer;
begin
-- Recuperar quantidade de Agentes
select count(*) into VQTDEAGENTES from MGGLO.GLO_AGENTES;
-- Se não existir agentes gera uma exceção
if VQTDEAGENTES = 0 then
RAISE_APPLICATION_ERROR(-20100,
'Não existem agentes cadastrados');
else
RAISE_APPLICATION_ERROR(-20100,
'Existem agentes cadastrados');
end if;
end;

Problema!!!
Vamos pensar em uma aplicação para nosso bloco?

E se o livro NÃO estiver alugado?

E se HOUVER o livro desejado?

E se o colaborador POSSUIR cadastro?

O que mais podemos usar?

20
11/09/2015

Cursores PL/SQL

Os cursores da PL/SQL fornecem um modo pelo qual seu programa


pode selecionar várias linhas de dados do banco de dados e depois
processar cada linha individualmente.

Especificamente, um cursor é um nome atribuído pela Oracle para


cada declaração SQL que é processada.

Esse nome fornece à Oracle um meio de orientar e controlar todas as


fases do processamento da SQL.

Cursores PL/SQL
Existem dois tipos de cursores:

Cursor Implícito: são cursores declarados pelo PL/SQL


implicitamente para todos comandos DML e comandos SELECT no
PL/SQL, independente da quantidade de registros processadas. Ele
precisa fazer isso para gerenciar o processamento da declaração
SQL.

Cursor Explícito: Cursores definidos pelo usuário para manipular


registros recuperados por declarações SELECT.

Cursores PL/SQL

Atributos:

%rowcount: Mostra o número de linhas do cursor

%found: Retorna TRUE se o mais recente FETCH retornar uma linha.

%notfound: Retorna TRUE se o mais recente FETCH não retornar


uma linha.

%isopen: Retorna TRUE se o cursor estiver aberto.

21
11/09/2015

Cursores PL/SQL
BEGIN
FOR rAgentes IN (SELECT AGN_IN_CODIGO
FROM MGGLO.GLO_AGENTES) LOOP
DBMS_OUTPUT.PUT_LINE(rAgentes.AGN_IN_CODIGO);
END LOOP;
END;

BEGIN
UPDATE MGGLO.GLO_MUNICIPIO G
SET G.UF_ST_SIGLA = 'SP'
WHERE G.MUN_ST_NOME = 'ITU';
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT||' linhas de municípios
foram atualizadas');
END;

Cursores PL/SQL
Cursor Explícito:

Problema!!!
Vamos buscar algumas informações?

Utilizando o conceito de cursor, crie um ranking dos colaboradores


que mais fizeram um empréstimo do livro de PL/SQL.

22
11/09/2015

Procedures
Procedures ou Procedimentos, são blocos PL/SQL nomeados,
também chamados de subprogramas, que são armazenados como
objetos do banco de dados.

As Procedures permitem criar blocos de código que podem conter


instruções procedurais e instruções SQL e podem possuir,
opcionalmente, parâmetros de entrada e/ou saída. Esses blocos
possuem um nome que permite identificá-los no banco de dados.

As aplicações e outros blocos PL/SQL podem invocar ou utilizar


as Procedures através de seu nome. Elas são ótimas para otimizar
performance e aumentar a segurança das aplicações, além de
promoverem “reusabilidade” e facilidade de manutenção.

Procedures
CREATE [OR REPLACE] PROCEDURE P_NOME [ (Parâmetro TIPO [IN/OUT]]) ]
IS
[Seção Declare]
BEGIN
Seção de Bloco
[EXCEPTION Seção de Exceção]
END [P_NOME];

IN - O parâmetro pode ser referenciada pelo procedimento ou função. O valor do parâmetro não pode ser
substituído pelo procedimento ou função.
OUT - O parâmetro não pode ser referenciada pelo procedimento ou função, mas o valor do parâmetro
pode ser substituído pelo procedimento ou função.
IN OUT - O parâmetro pode ser referenciada pelo procedimento ou função e o valor do parâmetro pode
ser substituído pelo procedimento ou função.

Procedures

CREATE OR REPLACE Procedure P_AtualizaUF(pMunicipio IN varchar2) IS


BEGIN
UPDATE MGGLO.GLO_MUNICIPIO G
SET G.UF_ST_SIGLA = 'SP'
WHERE G.MUN_ST_NOME = pMunicipio;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Erro ao atualizar UF!');
END;

23
11/09/2015

Problema!!!
O que podemos agilizar no nosso processo?

Utilizando o conceito de PROCEDURE, crie um processo onde


informamos o código e o valor do aluguel.

Após informar os parâmetros, a procedure deve atualizar o valor do


aluguel com a nova informação.

Funções

Functions ou Funções, também são blocos PL/SQL nomeados, muito


semelhantes às Procedures. A diferença principal é que as Funções
obrigatoriamente devem retornar um valor.

As funções são muito utilizadas para computar valores, promover


reuso, facilidade de manutenção e podem ser chamadas a partir de
outros blocos PL/SQL ou até mesmo por instruções SQL.

É muito comum utilizarmos funções em instruções SQL para efetuar


conversões de dados, formatar datas, contar o total de linhas, etc.

Funções

CREATE [OR REPLACE] FUNCTION F_NOME [(parâmetroTIPO)] RETURN TIPO IS |


AS
[Seção Declare]
BEGIN
Seção de Bloco
[EXCEPTION Seção de Exceção]
END [F_NOME];

24
11/09/2015

Funções

CREATE OR REPLACE FUNCTION F_VALOR(pValor


NUMBER) RETURN NUMBER IS
-- Declaração de variáveis
vTotal NUMBER;
BEGIN
vTotal := pValor * 10;
RETURN vTotal;
END;

Problema!!!
O que podemos agilizar no nosso processo?

Utilizando o conceito de FUNÇÃO, crie um processo onde


informamos o código do livro.

Após informar o parâmetro, a função deve informar se o livro está em


alugado.

Packages

Um pacote é uma coleção encapsulada de objetos de esquema


relacionados.

Esses objetos podem incluir procedimentos, funções, variáveis,


constantes, cursores, tipos e exceções.

Um pacote é compilado e depois armazenado no dicionário de dados


do banco de dados como um objeto de esquema.

25
11/09/2015

Packages
• Os pacotes oferecem as seguintes vantagens:

• Eles permitem organizar o desenvolvimento do seu aplicativo de forma mais


eficiente com os módulos. Cada pacote é facilmente entendido e as interfaces entre
os pacotes são simples, claras e bem definidas;
• Eles permitem conceder os privilégios de forma eficiente;
• As variáveis public e os cursores de um pacote persistem durante a sessão, ou seja,
todos os cursores e procedimentos que são executados nesse ambiente podem
compartilhar deles;
• Eles permitem executar a sobrecarga nos procedimentos e funções;
• Eles melhoram o desempenho carregando vários objetos ao mesmo tempo. Assim
sendo, as chamadas subsequentes a subprogramas relacionados no pacote não
requerem entrada/saída;
• Eles promovem a reutilização do código por meio do uso das bibliotecas que contêm
os procedimentos armazenados e as funções, eliminando assim a codificação
redundante.

Package - Specification
Declara os tipos, as variáveis, as constantes, as exceções, os
cursores e os subprogramas que estão disponíveis para uso.

Contém declarações public. Isso significa que os objetos declarados


no pacote são acessíveis de qualquer parte do pacote e são
disponíveis à programas externos.

Assim sendo, todas as informações que o aplicativo precisa para


executar u m programa armazenado estão contidas na especificação
do pacote.

create or replace package EST_PCK_TESTE is


end EST_PCK_TESTE;

Package - Body
Define totalmente as funções e os procedimentos e, assim, implementa a
especificação.

O corpo de um pacote contém a definição dos objetos public que você declara
na especificação. O corpo também contém as outras declarações de que são
privadas do pacote e que estão acessíveis apenas para os objetos do corpo
do pacote.

Os objetos privados declarados no corpo do pacote não são acessíveis para


outros objetos fora do pacote. Ao contrário da especificação do pacote, a
parte de declaração do corpo do pacote pode conter corpos de subrotinas.

create or replace package body EST_PCK_TESTE is


end EST_PCK_TESTE;

26
11/09/2015

Problema!!!
O que podemos organizar no nosso processo?

Utilizando o conceito de Package, vamos organizar nossos objetos.

View

Uma visão, em essência, é uma tabela virtual que não existe


fisicamente. Em vez disso, ele é criado por uma consulta juntar uma
ou mais tabelas.

Sintaxe:

CREATE OR REPLACE VIEW NOME_VIEW AS


SELECT COLUNAS
FROM TABELA
WHERE CONDICOES;

Trigger

Trata-se de um recurso de programação executado sempre que o


evento associado ocorrer. É um tipo especial de procedimento
armazenado, que é executado sempre que há uma tentativa de
modificar os dados de uma tabela que é protegida por ele.

É muito utilizada para ajudar a manter a consistência dos dados ou


para propagar alterações em um determinado dado de uma tabela
para outras. Um bom exemplo é um gatilho criado para controle de
quem alterou a tabela, nesse caso, quando a alteração for efetuada, o
gatilho é "disparado" e grava em uma tabela de histórico de alteração,
o usuário e data/hora da alteração.

27
11/09/2015

Trigger

CREATE OR REPLACE TRIGGER TRG_TESTE


BEFORE
INSERT OR UPDATE
ON MGGLO.GLO_MUNICIPIO
FOR EACH ROW
BEGIN
IF (:NEW.MUN_ST_NOME = 'ITU') and (:NEW.UF_ST_SIGLA
<> 'SP') THEN
raise_application_error(-20001,'Erro! Itu está localizada em SP!');
END IF;
END;

Dependências

Como verificar dependências de objetos?

Erro de Compilação

28
11/09/2015

Dúvidas???

29

Você também pode gostar