Banco de Dados II
Lista 2 – Conceitos básicos e sintaxe PL/SQL
1. Implemente o Algoritmo de Euclides em um bloco PL/SQL:
variáveis divisor: inteiro dividendo: inteiro c: inteiro início dividendo ← a divisor ← b enquanto resto(dividendo/divisor) ≠ 0 início c ← resto(dividendo/divisor) dividendo ← divisor divisor ← c fim-enquanto fim-algoritmo
declare divisor number:=:a; dividendo number:=:b; c number; begin while(divisor mod dividendo) <> 0 loop c :=(divisor mod dividendo); dividendo:=divisor; divisor:=c; end loop; dbms_output.put_line(divisor); end;
1
2. Implemente o algoritmo para cálculo de fatorial em um bloco PL/SQL:
leia nf fat ← 1 para i variando de 1 a n faça fat ← fat*i apresente fat declare num number:=:nf; fat number:=1; begin for i IN REVERSE 1..num loop fat:=fat*i; end loop; dbms_output.put_line(fat); end;
2
3. Escrever uma rotina PL/SQL que, com base no valor da variável A, realize as seguintes operações: - Se A < 10 inserir o valor de A na tabela T1; - Se A >= 10 e A < 20 inserir o valor de A na tabela T2; - Caso contrário inserir o valor de A na tabela T3. Observação: Criar a tabela T1 um campo numérico chamado valor.
create table t1(valor int) create table t2(valor int) create table t3(valor int) declare num number :=:a; begin if num<10 then insert into t1(valor) values (num); elsif ((num >=10) and (num<20)) then insert into t2(valor) values (num); else insert into t3(valor) values (num); end if; end; select * from t1 / select * from t2 / select * from t3
3
4. Elaborar um algoritmo PL/SQL que insira na tabela T1 os números pares menores que 100. Observação: A tabela T1 possui apenas um campo numérico chamado valor. begin for i IN 1..100 loop if (i mod 2)= 0 then insert into t1(valor) values (i); end if; end loop; end;
5. Faça um bloco PL/SQL que realize uma consulta na tabela LIVRO para encontrar o livro mais caro e o mais barato. Ao final da execução deverá ser gerada a mensagem: “O livro mais caro é o _______. O livro mais barato é o ________. E a diferença de valores entre eles é ________” max
livros.preco%TYPE;
min
livros.preco%TYPE;
timax livros.titulo%TYPE; timin
livros.titulo%TYPE;
begin select max(preco),min(preco) into max,min from livros; select titulo into timin from livros where preco = min; select titulo into timax from livros where preco = max; dbms_output.put_line('O livro mais caro é o '||timax||'. O livro mais barato é o '|| timin ||'. E a diferença de valores entre eles é: '||(max-min)); end;
4