Exercicios pl/sql
LOCADORA DE VIDEO
cliente (cod_cliente varchar2(20) ,nome varchar2(90) ,endereço varchar2(120)) locacao (cod_cliente varchar2(20),cod_fita varchar2(10),data_locação date) fitas (cod_fita varchar2(10),cod_filme varchar2(10),descricao varchar2(100),data_compra date) filmes (cod_filme varchar2(10),cod_categoria varchar2(4),descricao varchar2(90),duração number,valor number) categorias (cod varchar2(4),descrição varchar2(80))
Utilizando a estrutura do banco de dados de uma locadora de vídeo apresentada acima, desenvolva:
1) Uma FUNÇÃO que mostre a última data de locação de um filme, obtida através do código do filme passado como parâmetro.
create or replace function func_ultima_data (p_cod_filme filmes.cod_filme%type) return date is tmp_data date; begin select max(data_locacao) into tmp_data from locacao,fitas where locacao.cod_fita = fitas.cod_fita and fitas.cod_filme = p_cod_filme; return(tmp_data); end; 2) Uma PROCEDURE que atualize o preço da locação dependendo da categoria do Filme:
a. Musical – 10%
b. Drama – 15%
c. Outros – 5%
create or replace procedure atualiza_locacao is begin for dados in (select c.descricao,l.cod_fita,l.cod_cliente,l.data_locacao from categorias c,filmes f, fitas fi, locacao l where c.cod=f.cod_categoria and f.cod_filme = fi.cod_filme and fi.cod_fita = l.cod_fita) loop if dados.descricao = ‘Musical’ then update locacao set valor = valor * 1.1 where dados.cod_fita = cod_fita and dados.cod_cliente = cod_cliente and dados.data_locacao = data_locacao; elsif dados.descricao = ‘Drama’ then update locacao set valor = valor * 1.15 where dados.cod_fita = cod_fita and dados.cod_cliente = cod_cliente and dados.data_locacao = data_locacao; else update locacao set valor = valor * 1.05 where dados.cod_fita = cod_fita and dados.cod_cliente = cod_cliente and dados.data_locacao = data_locacao;