Upload
flavio-basso
View
1
Download
0
Embed Size (px)
DESCRIPTION
Trabalho sobre procedures e triggers no firebird
Citation preview
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 após cada questão.
1. (1,00) Crie os generators para fornecer valores incrementais para as chaves primárias das tabelas:
CLIENTESFILMESLOCACOESLOCACOES_ITENSPAGAMENTOSDEVOLUCOES
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 função de simular o auto-incremento, atribuindo valores para as chaves primárias somente se estas estiverem nulas:
ASbegin if(new.codigo is null)then new.codigo = gen_id(gen_clientes,1);
endProfª. Cheila Bombana – Banco de Dados II.
ASbegin if(new.codigo is null)then new.codigo = gen_id(gen_devolucoes,1);
end
ASbegin if(new.codigo is null)then new.codigo = gen_id(gen_filmes,1);
end
ASbegin if(new.codigo is null)then new.codigo = gen_id(gen_locacoes,1);end
ASbegin if(new.codigo is null)then new.codigo = gen_id(gen_locacoes_itens,1);end
ASbegin if(new.codigo is null)then new.codigo = gen_id(gen_pagamentos,1);end
3. (1,00) Use as triggers também para inicializar campos como datas e valores caso estejam nulos:
LOCACOES - Data = ‘NOW’, Valor, Pago = NLOCACOES_ITENS - Quantidade = 0, Valor Unitario = 0, Valor Total = Quantidade * Valor UnitarioPAGAMENTOS – Data = ‘NOW’, Valor = 0DEVOLUCOES – Data = ‘NOW’, Quantidade = 0
LOCAÇOES:
Asbeginif(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:
Asbeginif(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:Asbeginif(new.data is null)then new.data = 'NOW';
if(new.valor is null)then new.valor = 0;end
DEVOLUCOES:AsBegin
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 após cada inserção, alteração ou exclusão de registro.
After insert
Profª. Cheila Bombana – Banco de Dados II.
ASbegin update locacoes set locacoes.valor = locacoes.valor + new.valortotal where locacoes.codigo = new.cdlocacao;end
After update
ASbegin update locacoesset locacoes.valor = locacoes.valor - old.valortotal + new.valortotal where locacoes.codigo = new.cdlocacao;
end
After Delete
ASbegin 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 após cada inserção, alteração ou exclusão de registro.
After insert
ASbegin
update filmes set filmes.quantidade_disponivel = filmes.quantidade_disponivel + new.quantidade where filmes.codigo = new.cdfilme;end
After updateAs 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 após cada inserção, alteração ou exclusão de registro.
After Insert
ASbegin update filmes set filmes.quantidade_disponivel = filmes.quantidade_disponivel + new.quantidade where filmes.codigo = new.cdfilme;
end
After update
ASbegin update filmes set filmes.quantidade_disponivel = filmes.quantidade_disponivel - old.quantidade + new.quantidade
where filmes.codigo = new.cdfilme;
end
After delete
AS
Profª. Cheila Bombana – Banco de Dados II.
beginupdate filmesset filmes.quantidade_disponivel = filmes.quantidade_disponivel - old.quantidade
where filmes.codigo = old.cdfilme;end
7. (1,50) Crie ou altere trigger na tabela LOCACOES_ITENS que verifique se existe quantidade disponível de filme para locação antes de registrar o item da locação, mostrando mensagem caso não exista quantidade disponível. OBS: usar Exception, usar declare variable na triggerASdeclare 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 parâmetros de saída os seguintes campos: Código da LocaçãoData da LocaçãoNome do ClienteValor da LocaçãoCódigo do PagamentoData do PagamentoValor do Pagamento
Profª. Cheila Bombana – Banco de Dados II.
Valor Pendente (Valor da Locação - 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, :nome_cliente, :valor_locacao, :codigo_pgto, :data_pgto, :valor_pgto
do begin
valor_pendente = :valor_locacao - :valor_pgto;
suspend; endend
Trabalho individual.
Enviar, para o e-mail [email protected] 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.