Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Tecnologias De Base De Dados 
Packages e Triggers
Docente:
Dr. Vicente
CC-FCUAN-2018
3º Ano
Domingos Kiassungua
Edson Cabina
Bernardo Issenguel
Monitores:
01/11/2018 7:23
Sumário
Package
Estrutura de Packages
Triggers
Exercícios
01/11/2018 10:33CC-FCUAN- 2018
Exercícios
Tipos de Triggers
TABELAS
1. Categoria(codigo, designacao, salario) 
2. Funcionario(codigo, nome, genero, data_nasc, 
premio, _ _ _ _ _ _ _ _) 
3. Cliente(codigo, nome, idade, genero) 
4. Produto(codigo, nome, preco, qtd) 
5. Venda(codigo, qtd, data, _ _ _ _ _ _ _ , _ _ _ _ _ _ _ _, 
_ _ _ _ _ _ _ _ _).
01/11/2018 7:23CC-FCUAN- 2018
cod_funcionario
cod_produto
cod_categoria
cod_cliente
01/11/2018 7:23CC-FCUAN- 2018
INTRODUÇÃO
❑Packages: são blocos PL/SQL que têm a caracteristica de 
funcionar como repositório que pode agrupar objectos.
❑ Dentro de um package pode conter: 
➢ Stored Procedure e Functions 
➢ Declaração de váriaveis.
➢ Cursores
➢ Excepções
01/11/2018 7:23CC-FCUAN- 2018
STRUTURA DE PACKAGE 
Package é formado por no maximo duas secções.
❑ especification (especificação).
❑ body (corpo).
Não podemos ter um package body sem o package 
especification.
Não se pode aceder a um programa em um package body 
sem estar declarado em um package especification 
PACKAGE ESPECIFICATION
No package especification pode conter:
❑ Declaração de variáveis e constantes.
❑ Especificação de procedures e functions.
❑ Declaração de cursores.
❑ Declaração de exceptions.
❑ Declaração de types.
CC-FCUAN- 2018 01/11/2018 7:23
PACKAGE BODY
No package body pode conter:
❑ Códigos PL/SQL.
❑ Códigos de procedures e functions.
❑ Declaração de variáveis e constantes.
❑ Declaração de cursores.
❑ Declaração de exceptions.
❑ Declaração de types.
CC-FCUAN- 2018 01/11/2018 7:23
PACKAGES - SINTAXE DE DECLARAÇÃO
❑ Package especification
❑ Package body
CC-FCUAN- 2018 01/11/2018 7:23
create package nome_package is
procedure nome_procedure;
email varchar2(255);
end nome_package;
Create package body 
nome_package is
procedure nome_procedure is
begin
end;
end nome_package;
Criar um package para 
área de vendas que contém 
uma procedure que lista 
todos produtos vendidos 
em uma determinada data.
CREATE PACKAGE vendas IS
PROCEDURE apresentar_venda_por_data(data date);
END vendas;
CC-FCUAN- 2018 01/11/2018 7:23
Exemplo – Packages (especification)
Criar um package para 
área de vendas que 
contém uma procedure 
que lista todos produtos 
vendidos em uma 
determinada data.
CREATE PACKAGE BODY vendas IS
PROCEDURE apresentar_venda_por_data(data date) IS
CURSOR c_vendas IS
SELECT p.nome as nome FROM venda v, produto p
WHERE p.codigo = v.cod_produto AND v.data = data;
v_venda c_vendas%ROWTYPE;
BEGIN
FOR v_venda in c_vendas LOOP
DBMS_OUTPUT.PUT_LINE(‘Nome:’||v_venda.nome);
END LOOP;
END;
END vendas;
CC-FCUAN- 2018 01/11/2018 7:23
Exemplo – Packages (body)
Package – Chamando membros
DECLARE
v_data date;
BEGIN
v_data :=:INSIRA_DATA;
vendas.apresentar_venda_por_data(v_data);
END
CC-FCUAN- 2018 01/11/2018 7:23
EXERCÍCIOS
1. Crie um packege (especification e body) para área
administrativa (funcionários) que contenha o seu
respectivo CRUD.
2. Crie um package (especification e body) contendo todas
a function’s resolvidas no laboratório 4 (aula prática 4).
3. Crie um packge (especification e body) que contém
stored procedures que tratam da estátistica das vendas, ou
seja, o package deve conter stored procedures que
respodem as seguintes questões: qual é o produto mais
vendido?, qual é a média das vendas no primeiro
bimestre,trimestre e semestre?, qual é o produto menos
requisitado?, etc.
01/11/2018 7:23CC-FCUAN- 2018
TRIGGERS
É um bloco PL/SQL que dispara (executa) automaticamente 
quando uma determinada acção ocorre em um SGBD.
Este disparo pode acontecer mediante a dois eventos:
❑ Por alterações feitas em registos de uma determinada tabela.
❑ Por acções feitas a nível de sistema.
CC-FCUAN- 2018 01/11/2018 7:23
TRIGGERES – TIPOS DE TRIGGERS
Existem dois tipos de triggers:
❑ Triggers de base de dados.
❑ Triggers de sistema.
CC-FCUAN- 2018 01/11/2018 7:23
TRIGGERS – TRIGGER DE BASE DE DADOS
Triggers de base de dados são triggers associadas 
obrigatoriamente a uma tabela. E elas podem ser de dois 
tipos:
❑ Triggers de tabela
❑ Triggers de linha.
CC-FCUAN- 2018 01/11/2018 7:23
TRIGGER DE TABELA
Triggers que executam uma única vez independente do 
número de linhas afectadas pelo comando dml.
❑DECLARAÇÃO
CC-FCUAN- 2018 01/11/2018 7:23
CREATE OR REPLACE TRIGGER nome_trigger
BEFORE DELETE OR INSERT OR UPDATE OF coluna ON nome_tabela
BEGIN
<instruções>
END;
TRIGGER DE TABELA
ONDE:
❑ create or replace trigger: cria ou substitui uma trigger.
❑ nome_trigger: É o nome dado a trigger no acto da sua criação ou 
actualização.
❑ before: Define que o disparo da trigger será feito antes da inserção 
(insert), remoção (delete) ou actualização (update) na tabela referida. 
Outra alternativa seria definirmos como after e neste caso o disparo 
acontece depois de um comando dml.
❑ begin: Inicia o bloco de instruções das triggers.
❑ end: Encerra o bloco de instruções das triggers.
CC-FCUAN- 2018 01/11/2018 7:23
Crie uma trigger que 
diminui a quantidade de 
um produto assim que o 
mesmo for vendido.
CREATE OR REPLACE TRIGGER diminui_qtd_produto
AFTER INSERT ON venda
DECLARE
v_codigo venda.codigo%TYPE;
v_qtd venda.qtd%TYPE;
v_cod_produto venda.cod_produto%TYPE;
BEGIN
SELECT MAX(v.codigo) INTO v_codigo FROM venda v;
SELECT v.qtd,v.cod_produto INTO v_qtd, v_cod_produto
FROM venda v WHERE v.codigo = v_codigo;
UPDATE produto p set p.qtd = (qtd-v_qtd) 
WHERE p.codigo = v_cod_produto; 
END;CC-FCUAN- 2018
Exemplo 1:
TRIGGER DE LINHA
Triggers que executam para cada linha afectada por um comando dml.
❑ DECLARAÇÃO.
CC-FCUAN- 2018 01/11/2018 7:23
CREATE OR REPLACE TRIGGER nome_trigger
BEFORE INSERT OR DELECT OR UPDATE ON nome_tabela
REFERENCING OLD AS VELHO
NEW AS NOVO
FOR EACH ROW
BEGIN
<instruções>
END;
TRIGGER DE LINHA
ONDE:
❑nome_trigger: É o nome dado a trigger no acto da sua criação ou 
actualização.
❑ before: Define que o disparo da trigger será feito antes da inserção 
(insert), remoção (delete) ou actualização (update) na tabela referida. 
Outra alternativa seria definirmos como after e neste caso o disparo 
acontece depois de um comando dml.
❑ for each row: implica dizer que a trigger vai ser executada para cada 
linha afectada pelo comando dml.
❑ referencing old e new: referências que apontam para os dados novos e 
anteriores a respectivamente.
CC-FCUAN- 2018 01/11/2018 7:23
Crie uma nova tabela 
(Audi_vendas), que contém 
o código do produto, 
funcionário e a data da 
venda. E em seguida crie 
uma trigger que preencha 
esta tabela assim que uma 
ou mais vendas forem 
removidas.
CREATE OR REPLACE TRIGGER add_venda_estornada
AFTER DELETE ON venda 
REFERENCING OLD AS v 
FOR EACH ROW 
BEGIN
INSERT INTO audi_venda
VALUES(:v.cod_produto,:v.cod_funcionario,:v.data);
END;
CC-FCUAN- 2018 01/11/2018 7:23
Exemplo 2:
EXERCÍCIOS
4. Crie uma trigger que regista o histórico de alterações de
salários da tabela categoria.
5. Crie uma trigger que faça a atribuição à um novo
funcionário um prémio de 5% do salário de sua categoria.
6. Crie uma trigger que penalise um funcionário com a
categória diferente de balconista, reduzindo 25% em seu
salário.
01/11/2018 7:23CC-FCUAN- 2018
TRIGGERS DE SISTEMA
❑ São objetos criados a nível de sistema e não de tabelas. 
Astriggers de sistemas são executadas sempre que uma 
operação acontece em um SGBD.
❑ Também temos a disposição os atributos de evento que
nos dão informações sobre o banco de dados, transações e 
sobre as operações que disparam o trigger
❑ Tanto alista de eventos que ocorrem no sistema, quanto 
seus atributos são listados em duas tabelas a baixo.
CC-FCUAN- 2018 01/11/2018 11:38
LISTA DE EVENTOS DE SISTEMA
NOME EVENTO DESCRIÇÃO DO EVENTO
after logon Depois de uma conexão ser completada no banco de dados.
before create / after create Quando um objeto é criado no banco de dados
before alter / after alter Quando um objeto é alterado no banco de dados
before drop / after drop Quando um objeto é eliminado do banco de dados
before logoff Quando o usuário desconecta do banco de dados
before commit / after commiT Quando um commit é executado
before ddl / after ddl Quando um comando ddl é executado
startup Quando o banco de dados é aberto
CC-FCUAN- 2018 01/11/2018 11:35
LISTA DE ATRIBUTOS DE EVENTOS
ATRIBUTO DESCRIÇÃO
ora_client_ip_address Retorna o IP da máquina cliente no evento de 
LOGON, se o protocolo for TCP/IP
ora_database_name nome do banco de dados;
ora_dict_obj_name nome do objeto que sofreu o evento ddl
ora_dict_obj_ownerR proprietário (utulizador/schema) do objeto que sofreu 
o evento ddl
ora_dict_obj_owner_list retorna lista de proprietários (usuário/schemas) dos 
objetos afetados no evento;
CC-FCUAN- 2018 01/11/2018 11:49
Cria uma trigger que 
regista o histórico do 
utilizador. Para tal 
crie também a tabela 
utilizador 
CREATE OR REPLACE TRIGGER 
regista_hist_utilizador
AFTER LOGON ON database
BEGIN
INSERT INTO hist_utilizador VALUES
(ORA_LOGIN_USER,sysdate,’Conexão'||ORA
_DATABASE_NAME);
END;
CC-FCUAN- 2018 01/11/2018 11:55
Exemplo 3

Mais conteúdos dessa disciplina