Primeira aula de PL/SQL
Parte II
SEQUENCE, PROCEDURE,
FUNÇÃO, TRIGGER
Trigger
3) Crie uma TRIGGER que altere de forma automática o valor
da locação aos finais de semana. Aos sábados e Domingos, as
locações devem ser acrescidas em 10% .
CREATE or replace TRIGGER trg_valor_locacao
BEFORE INSERT ON locacao
FOR EACH ROW
BEGIN
If to_char(:new.data_locacao,’d’) in (1,7) then
:new.valor:=:new.valor*1.1;
End if;
END;
Testando a Trigger
4) Para testar a trigger
“trg_valor_locacao”, insira dados na tabela
locacao em diferentes dias da semana para
verificar se as locações ocorridas aos
sábados e domingos terão seu valor
alterado, o que não acontecerá com os
outros dias das semana
Função
5) Crie uma função para retornar o nome do cliente passando seu código
como parâmetro
create or replace function NOME_CLIENTE(p_cod_cliente number)
return varchar2 is
tmp_nome varchar2(20);
begin
begin
select nome into tmp_nome
from cliente
where cod_cliente = p_cod_cliente;
exception
when no_data_found then
null;
end;
return (tmp_nome);
end;
Testando a Função
6) Para testar a função “NOME_CLIENTE” use um
SELECT da seguinte maneira:
Select NOME_CLIENTE(xyz) from dual;
(xyz é o código de um cliente que você inseriu. Como
código do cliente é um dado do tipo varchar, não se
esqueça de colocar o parâmetro entre aspas simples)
Procedure
7) Criar uma “procedure” que mantenha o histórico de
locacões, deixando na tabela “locacao”,
somente os dados do mês corrente. O restante das
informações deverá ser armazenado em
uma tabela histórico (locacao_historico).
7 a - Primeiramente, vamos criar a tabela
“locacao_historico “ que tem o mesmo esquema da
tabela “locacao”
Create table locacao_historico (num number,
cod_cliente varchar2(20),cod_fita
varchar2(10),data_locação date, valor number(7,2));
Procedure
7 b- Agora, vamos criar a Procedure propriamente dita
create or replace procedure limpa_locacao is
begin
for pesquisa in (select * from locacao) loop
if to_char(pesquisa.data_locacao,'mm')<>to_char(sysdate,'mm')
then
insert into locacao_historico
values (pesquisa.num, pesquisa.cod_cliente,pesquisa.cod_fita,
pesquisa.data_locacao,pesquisa.valor);
delete from locacao
where num = pesquisa.num;
end if;
end loop;
end;
Testando a Procedure
8) Executar a Procedure
Exec limpa_locacao;
Download

Primeira aula de PL-SQL