Você está na página 1de 10

LISTA DE EXERCCIOS DE BANCO DE

DADOS II
Rafael Silva Santos RA: 1305174
Disciplina: Banco de Dados II
Professor: Ronaldo Celso Messias Correia

Presidente Prudente
2013

Procedures Exerccios
1. Elabore uma procedure para efetuar a baixa do estoque de um produto.
A procedure dever receber dois parmetros de entrada (cdigo do produto
e quantidade vendida). Caso o produto no tenha no estoque a procedure
dever armazenar em uma tabela denominada produtos_em_falta as
seguintes informaes: data, usurio, prd_codigo, qtd_estoque,
qtd_vendida.
DELIMITER $$
DROP PROCEDURE IF EXISTS baixaDeEstoque(cod_produto INT, qtd_vendida INT) $$
CREATE PROCEDURE baixaDeEstoque(cod_produto INT, qtd_vendida INT)
BEGIN
SELECT prd_codigo, qtd_estoque FROM produto
END $$
DELIMITER ;

2. Elabore uma procedure para fazer um cpia dos dados de um pedido em


uma tabela denominada pedidos_finalizados, e todos os seus itens_pedido
sejam
armazenados
em
uma
tabela
denominada
itens_pedidos_finalizados. Aps a cpia, o pedido e seus itens sero
excludos.
DELIMITER $$
DROP PROCEDURE IF EXISTS pedidosFinalizados() $$
CREATE PROCEDURE pedidos_finalizados()
BEGIN
SELECT * FROM pedidos WHERE (status LIKE finalizado)
END $$

3. Elabore uma procedure para efetuar a comparao entre estoque


mnimo e estoque atual de um produto. Caso o estoque esteja abaixo do
estoque mnimo, ser armazenado em uma tabela produtos requisio
(prd_codigo, prd_estoque, prd_acomprar). Se for necessrio, inclua o
atributo estoque mnimo na tabela de produtos.

DELIMITER $$
DROP PROCEDURE IF EXISTS compararEstoque() $$
CREATE PROCEDURE compararEstoque()
BEGIN
SELECT * FROM prd_codigo, prd_estoque, prd_acompra WHERE (estoque_minimo >
estoque_atual)
END $$

4. Elabore uma procedure para reajustar o preco de um produto com uma


determinada taxa (porcentagem).
DELIMITER $$
DROP PROCEDURE IF EXISTS reajustarPreco(porcentagem FLOAT) $$
CREATE PROCEDURE reajustarPreco(porcentagem FLOAT)
BEGIN
UPDATE produto SET preco = preco + porcentagem*preco
END $$

5. Elabore uma procedure para alterar o estagiario (conferncia) de um


pedido.
DELIMITER $$
DROP PROCEDURE IF alterar_estagiario(cod_estagiario INT) $$
CREATE PROCEDURE alterar_estagiario(cod_estagiario INT)
BEGIN
UPDATE estagiario SET conferencia = cod_estagiario WHERE (cod_estagiario LIKE
cod_estagiario)
END $$

6. Elabore uma procedure para alterar o status de uma pessoa para um


novo status.
DELIMITER $$
DROP PROCEDURE IF alterar_status_pessoa(status INT) $$
CREATE PROCEDURE alterar_status_pessoa(status INT)
BEGIN
UPDATE pessoa SET status_pessoa = status
END $$

7. Elabore as procedure de insero, excluso (no fsica) e alterao


de todas as tabelas do banco de dados estoque.
DELIMITER $$
DROP PROCEDURE IF alterarTabelas() $$
CREATE PROCEDURE alterarTabelas()
BEGIN
SELECT * FROM pessoa
SELECT * FROM produto
SELECT * FROM item_vendido
END $$

8. Faa uma procedure para reajustar o salrio de todos os


funcionrios que no so supervisores. A procedure dever receber uma
taxa de reajuste.
DELIMITER $$
DROP PROCEDURE IF alterarSalarios(taxa FLOAT) $$
CREATE PROCEDURE alterarSalarios(taxa FLOAT)
BEGIN
UPDATE supervisor SET salario = salario + taxa*salario
END $$

9. Faa uma procedure para calcular a quantidade vendida de um


produto at o momento. A procedure dever somar todas as
quantidades vendidas do produto e armazenar em uma tabela
denominada produtos_vendidos (prd_produto, data, qtd_total_vendida).
DELIMITER $$
DROP PROCEDURE IF quantidadeVendida() $$
CREATE PROCEDURE quantidadeVendida()
BEGIN
SELECT COUNT FROM item_pedido
END $$

10. Elabore uma procedure para calcular o valor total


(faturamento) a partir de uma determinada data informada.

vendido

DELIMITER $$
DROP PROCEDURE IF valorTodVendidd() $$
CREATE PROCEDURE valorTodVendidd()
BEGIN
SELECT SUM(valor) FROM item_pedido
END $$

TRIGGERS Exerccios
1. Faa um trigger para armazenar em uma tabela chamada
produtos_atualizados (prd_codigo, prd_qtd_anterior, prd_qtd_atualizada,
prd_valor) quando ocorrer uaisquer alteraes nos atributos da tabela
produtos. No entanto, caso a alterao atribua o valor zero para o
atributo prd_qtd_estoque, a tabela produtos_em_falta dever ser
alimentada com as mesmas informaes da tabela produto, exceto o
atributo prd_valor. Alm disso, o atributo prd_status do produto
atualizado deve ser modificado para NULL e o atributo orp_status de todos
os orcamentos_produtos desse produto dever ser modificado tambm
para NULL.
CREATE OR REPLACE TRIGGER t
BEFORE
INSERT OR
UPDATE OF salary, department_id OR
DELETE
ON employees
BEGIN
CASE
WHEN INSERTING THEN
DBMS_OUTPUT.PUT_LINE('Inserting');
WHEN UPDATING('salary') THEN
DBMS_OUTPUT.PUT_LINE('Updating salary');
WHEN UPDATING('department_id') THEN
DBMS_OUTPUT.PUT_LINE('Updating department ID');
WHEN DELETING THEN
DBMS_OUTPUT.PUT_LINE('Deleting');
END CASE;

END;
/

2. Faa um trigger para armazenar em uma tabela chamada


Histrico_Produtos_Excludos
(prd_codigo,
prd_qtd_estoque,
prd_preco_venda) todos os produtos que foram excludos da tabela
Produtos, mais a informao de qual usurio do sistema realizou a
excluso e em qual data e hora. Ateno, essa trigger somente excluir
os produtos se eles no tiverem quantidades em estoque
(prd_qtd_estoque). Caso isso acontea a tabela chamada TentativasLog
(data, operao, prd_codigo, usurio_bd) alimentada com os dados
dos produtos que seriam excludos, ou seja, com os cdigo dos produtos
que estavam no cursor. Alm disso, o atributo prd_status desses
produtos (que seriam excludos) tero seu valor atualizado para 0 (zero),
que indica que um produto deve ser vendido rapidamente.
CREATE OR REPLACE TRIGGER conta_aluno
AFTER INSERT OR DELETE OR UPDATE OF sexo_aluno
ON aluno
REFERENCING OLD AS antigo NEW AS novo
FOR EACH ROW
BEGIN
IF inserting THEN
IF :novo.sexo_aluno = 'f
THEN UPDATE totaliza SET total = total + 1
WHERE sexo = 'feminino';
ELSE UPDATE totaliza SET total = total + 1
WHERE sexo = 'masculino';
END IF;

3. Faa um trigger para que no momento do cancelamento de oramento


(orc_status

modificado
para
0),
a
tabela
orcamento_produtos_cancelados seja alimentada com as informaes da
tabela orcamentos_produtos e todos os orcamentos_produtos do
oramento cancelado devem ser fisicamente excludos. Alm disso, a
tabela orcamentos_cancelados deve ser alimentada com as mesmas
informaes do oramento cancelado e, o oramento cancelado deve ser
excludo fisicamente. Dessa forma, nas tabelas do diagrama acima
somente ficaro os orcamentos confirmados ou a serem confirmados.

CREATE TRIGGER se_filme_existe


BEFORE DELETE OR UPDATE ON distribuidores FOR EACH ROW
EXECUTE PROCEDURE verificar_chave_primaria (1, 'CASCADE', 'did', 'filmes', 'did');

4. Faa um trigger que aps a confirmao de oramento (orc_status


modificado para 1), seja verificado em cada oramentos_produtos se a
quantidade orada (orp_qtd) suficiente no estoque (prd_qtd_estoque).
Caso afirmativo, o atributo orp_status deve ser modificado para 1. Caso
contrario, o atributo orp_status deve ser modificado para 2 e a tabela
produtos_requisitados (prd_codigo, orc_codigo, qtd_em_falta, orp_valor,
data, usuario_sistema) alimentada. Dessa forma, essa tabela manter
todos os produtos que j foram vendidos e que no tinham no estoque
no momento da confirmao do oramento. O atributo qtd_em_falta
a diferena da quantidade orada e a quantidade no estoque.
CREATE OR REPLACE TRIGGER Print_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
sal_diff number;
BEGIN
sal_diff := :new.sal - :old.sal;
dbms_output.put('Old salary: ' || :old.sal);
dbms_output.put(' New salary: ' || :new.sal);
dbms_output.put_line(' Difference ' || sal_diff);
END;
/

5. Faa um trigger que aps a atualizao do estoque de produtos faauma


verificao na tabela oramentos_produtos para verificar quais os
oramentos do produto que foi atualizado esto com o status (orp_status)
com o valor 2. Para esses casos, o trigger dever efetuar a baixa do
estoque considerando o atributo
orp_qtd registrado para cada
oramento desse produto.
REATE OR REPLACE TRIGGER t
BEFORE
INSERT OR
UPDATE OF salary, department_id OR
DELETE
ON employees
BEGIN
CASE
WHEN INSERTING THEN
DBMS_OUTPUT.PUT_LINE('Inserting');

WHEN UPDATING('salary') THEN


DBMS_OUTPUT.PUT_LINE('Updating salary');
WHEN UPDATING('department_id') THEN
DBMS_OUTPUT.PUT_LINE('Updating department ID');
WHEN DELETING THEN
DBMS_OUTPUT.PUT_LINE('Deleting');
END CASE;
END;
/

6. Faa uma trigger que faa o calculo da quantidade necessria para


atender os oramentos dos produtos registrados na tabela
produtos_requisitados (prd_codigo, orc_codigo, qtd_em_falta, orp_valor,
data, usuario_sistema). Dessa forma, a quantidade necessria ser
armazenada no atributo prd_falta da tabela de produtos.
CREATE TRIGGER se_filme_existe
BEFORE DELETE OR UPDATE ON distribuidores FOR EACH ROW
EXECUTE PROCEDURE verificar_chave_primaria (1, 'CASCADE', 'did', 'filmes', 'did');

7. Faa um trigger para armazenar em uma tabela chamada


Histrico_Precos (prd_codigo, data, prd_preco_antigo, prd_preco_novo,
usuario_bd, usuario_sistema) as alteraes de preos ocorridas nos
produtos cadastrados na tabela Produtos (prd_codigo, prd_descricao,
prd_qtd, prd_preco, prd_status). Ateno, esse trigger somente dever
ser disparado quando houver alterao no atributo prd_preco da tabela
produtos e, deve permitir as alteraes de preos de mais de um produto.
CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
IF NEW.amount < 0 THEN
SET NEW.amount = 0;
ELSEIF NEW.amount > 100 THEN
SET NEW.amount = 100;
END IF;
END;//

8. Em uma operao de atualizao dos dados de produtos, implemente


um trigger que armazene os dados (registro inteiro) a serem modificados
em uma tabela denominada dados_produtos_antigos e, os novos dados
(registro inteiro) em uma tabela denominada dados_produtos_novos. Em

ambas as tabelas (dados_produtos_antigos e dados_produtos_novos) a


estrutura dos atributos a mesma da tabela produtos.
CREATE or REPLACE TRIGGER price_history_trigger
BEFORE UPDATE OF unit_price
ON product
FOR EACH ROW
BEGIN
INSERT INTO product_price_history
VALUES
(:old.product_id,
:old.product_name,
:old.supplier_name,
:old.unit_price);
END;
/

9. Faa um trigger para que seja disparado na operao de excluso


da tabela de produtos. Esse trigger no permitir que seja feitaa excluso
fsica, mas alterar o valor do atributo prd_status para 4, de um ou mais
produtos a serem excludos.
CREATE TRIGGER se_dist_existe
BEFORE INSERT OR UPDATE ON filmes FOR EACH ROW
EXECUTE PROCEDURE verificar_chave_primaria ('did', 'distribuidores', 'did');

10. Faa um trigger para armazenar em uma tabela chamada


Histrico_Produtos_Excludos (prd_codigo, prd_descricao, prd_qtd,
prd_preco_venda) todos os produtos que foram excludos da tabela
Produtos (prd_codigo, prd_descricao, prd_qtd, prd_preco_venda), mais a
informao de qual usurio do sistema realizou a excluso e em qual data
e hora. Ateno, essa triggersomente excluir os produtos se eles no
tiverem quantidades em estoque (prd_qtd). Caso isso acontea a tabela
chamada TentativasLog (data, operao, prd_codigo, usurio_bd)
alimentada com os dados dos produtos que seriam excludos, ou seja, com
os cdigo dos produtos que estavam no cursor.
CREATE OR REPLACE TRIGGER nome_gatilho
BEFORE | AFTER
DELETE OR INSERT OR UPDATE OF coluna1, coluna2, ...
ON nome_da_tabela
REFERENCING OLD AS nome NEW AS nome
FOR EACH ROW
WHEN condio
DECLARE
rea de declarao

BEGIN
rea de comandos
END ;

Você também pode gostar