Vous êtes sur la page 1sur 7

Trabalho 2

Nome= Ricardo Duranti


Usando a ferramenta IBExpert e o banco de dados LOCADORA.FDB, desenvolva a
tarefas listadas a seguir:
*Colar os SQLs criados e testados aps cada questo.
1. (1,00) Crie os generators para fornecer valores incrementais para as chaves
primrias das tabelas:
CLIENTES
FILMES
LOCACOES
LOCACOES_ITENS
PAGAMENTOS
DEVOLUCOES
CREATE SEQUENCE GEN_CLIENTES;
ALTER SEQUENCE GEN_CLIENTES RESTART WITH 0;
CREATE SEQUENCE GEN_FILMES;
ALTER SEQUENCE GEN_FILMES RESTART WITH 0;
CREATE SEQUENCE GEN_LOCACOES;
ALTER SEQUENCE GEN_LOCACOES RESTART WITH 0;
CREATE SEQUENCE GEN_LOCACOES_ITENS;
ALTER SEQUENCE GEN_LOCACOES_ITENS RESTART WITH 0;
CREATE SEQUENCE GEN_PAGAMENTOS;
ALTER SEQUENCE GEN_PAGAMENTOS RESTART WITH 0;
CREATE SEQUENCE GEN_DEVOLUCOES;
ALTER SEQUENCE GEN_DEVOLUCOES RESTART WITH 0;
2. (1,00) Crie uma trigger para cada tabela, que tenha a funo de simular o autoincremento, atribuindo valores para as chaves primrias somente se estas
estiverem nulas:
AS
begin
if(new.codigo is null)then
new.codigo = gen_id(gen_clientes,1);
end
Prof. Cheila Bombana Banco de Dados II.

AS
begin
if(new.codigo is null)then
new.codigo = gen_id(gen_devolucoes,1);
end
AS
begin
if(new.codigo is null)then
new.codigo = gen_id(gen_filmes,1);
end
AS
begin
if(new.codigo is null)then
new.codigo = gen_id(gen_locacoes,1);
end
AS
begin
if(new.codigo is null)then
new.codigo = gen_id(gen_locacoes_itens,1);
end
AS
begin
if(new.codigo is null)then
new.codigo = gen_id(gen_pagamentos,1);
end
3. (1,00) Use as triggers tambm para inicializar campos como datas e valores caso
estejam nulos:
LOCACOES - Data = NOW, Valor, Pago = N
LOCACOES_ITENS - Quantidade = 0, Valor Unitario = 0, Valor Total = Quantidade * Valor
Unitario
PAGAMENTOS Data = NOW, Valor = 0
DEVOLUCOES Data = NOW, Quantidade = 0
LOCAOES:
As
begin
if(new.data is null)then
new.data = 'NOW';
Prof. Cheila Bombana Banco de Dados II.

if(new.valor is null)then
new.valor = 0;
if(new.pago is null)then
new.pago = 'N';
end
LOCACOES_ITENS:
As
begin
if(new.quantidade is null)then
new.quantidade = 0;
if(new.valorunitario is null)then
new.valorunitario = 0;
new.valortotal = new.quantidade * new.valorunitario;
end
PAGAMENTOS:
As
begin
if(new.data is null)then
new.data = 'NOW';
if(new.valor is null)then
new.valor = 0;
end
DEVOLUCOES:
As
Begin
if(new.data is null)then
new.data = 'NOW';
if( new.quantidade is null)then
new.quantidade = 0;
end
4. (1,00) Crie triggers na tabela LOCACOES_ITENS que atualizem o campo VALOR
na tabela LOCACOES aps cada insero, alterao ou excluso de registro.
After insert
Prof. Cheila Bombana Banco de Dados II.

AS
begin
update locacoes
set locacoes.valor = locacoes.valor + new.valortotal
where locacoes.codigo = new.cdlocacao;
end
After update
AS
begin
update locacoes
set locacoes.valor = locacoes.valor - old.valortotal + new.valortotal
where locacoes.codigo = new.cdlocacao;
end
After Delete
AS
begin
update locacoes
set locacoes.valor = locacoes.valor - old.valortotal
where locacoes.codigo = old.cdlocacao;
end
5. (1,50) Crie triggers na tabela LOCACOES_ITENS que atualizem o campo
QUANTIDADE_DISPONIVEL na tabela FILMES aps cada insero, alterao ou
excluso de registro.
After insert
AS
begin
update filmes
set filmes.quantidade_disponivel = filmes.quantidade_disponivel +
new.quantidade
where filmes.codigo = new.cdfilme;
end
After update
As
Begin
update filmes
set filmes.quantidade_disponivel = filmes.quantidade_disponivel old.quantidade + new.quantidade
where filmes.codigo = new.cdfilme;
Prof. Cheila Bombana Banco de Dados II.

end
After Delete
As
begin
update filmes
set filmes.quantidade_disponivel = filmes.quantidade_disponivel old.quantidade
where filmes.codigo = old.cdfilme;
end

6. (1,50) Crie triggers na tabela DEVOLUCOES que atualizem o campo


QUANTIDADE_DISPONIVEL na tabela FILMES aps cada insero, alterao ou
excluso de registro.
After Insert
AS
begin
update filmes
set filmes.quantidade_disponivel
new.quantidade
where filmes.codigo = new.cdfilme;

filmes.quantidade_disponivel

end
After update
AS
begin
update filmes
set filmes.quantidade_disponivel
old.quantidade + new.quantidade

filmes.quantidade_disponivel

where filmes.codigo = new.cdfilme;


end
After delete
AS
Prof. Cheila Bombana Banco de Dados II.

begin
update filmes
set
filmes.quantidade_disponivel
old.quantidade

filmes.quantidade_disponivel

where filmes.codigo = old.cdfilme;


end

7. (1,50) Crie ou altere trigger na tabela LOCACOES_ITENS que verifique se existe


quantidade disponvel de filme para locao antes de registrar o item da locao,
mostrando mensagem caso no exista quantidade disponvel.
OBS: usar Exception, usar declare variable na trigger
AS
declare variable quant integer;
begin
select filmes.quantidade_disponivel
from filmes
where filmes.codigo = new.cdfilme
into :quant ;
if(:quant < new.quantidade)then
exception qtd_insuficiente;
if(new.codigo is null)then
new.codigo = gen_id(gen_locacoes_itens,1);
if(new.quantidade is null)then
new.quantidade = 0;
if(new.valorunitario is null)then
new.valorunitario = 0;
new.valortotal = new.quantidade * new.valorunitario;
end
8. (1,50) Crie uma procedure com o nome ANALISE_PAGAMENTOS, que deve ter
como parmetros de sada os seguintes campos:
Cdigo da Locao
Data da Locao
Nome do Cliente
Valor da Locao
Cdigo do Pagamento
Data do Pagamento
Valor do Pagamento
Prof. Cheila Bombana Banco de Dados II.

Valor Pendente (Valor da Locao - Valor do Pagamento)


begin
for
select locacoes.codigo,clientes.nome,locacoes.valor,
pagamentos.codigo, pagamentos.data, pagamentos.valor
from locacoes
inner join clientes on (clientes.codigo = locacoes.cdcliente)
inner join pagamentos on (locacoes.codigo = pagamentos.cdlocacao)
into :codigo_locacao,
:data_pgto, :valor_pgto

:nome_cliente,

:valor_locacao,

:codigo_pgto,

do begin
valor_pendente = :valor_locacao - :valor_pgto;
suspend;
end
end

Trabalho individual.
Enviar, para o e-mail cbombana@gmail.com at o dia 02/12/2014, com o assunto
Trabalho BD II, este arquivo preenchido e o banco de dados alterado.

Prof. Cheila Bombana Banco de Dados II.

Vous aimerez peut-être aussi