Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- set serveroutput on;
- /*
- 4. Criar um script com código PL/SQL para implementar uma função, designada funcStockMax.
- A função deve retornar o maior stock das edições dos livros da livraria.
- Testar adequadamente a função implementada, através de blocos anónimos.
- */
- create or replace function funcStockMax return edicoes_livros.stock%type
- as
- v_max edicoes_livros.stock%type;
- begin
- select max(stock) into v_max
- from edicoes_livros;
- return v_max;
- end;
- /
- declare
- x edicoes_livros.stock%type;
- begin
- x := funcStockMax;
- dbms_output.put_line(x);
- end;
- /
- /*
- 5. Criar um novo script PL/SQL para implementar um procedimento, designado procTitulosEdicoesStockMax.
- O procedimento deve listar os títulos das edições dos livros que têm o maior stock.
- Caso o stock seja zero, deve ser apresentada uma mensagem apropriada, usando o mecanismo
- de exceções. Testar adequadamente o procedimento implementado, através de blocos anónimos.
- */
- create or replace procedure procTitulosEdicoesStockMax
- as
- v_stock edicoes_livros.stock%type;
- ex_stock exception;
- begin
- v_stock := funcStockMax;
- if v_stock = 0 then
- raise ex_stock;
- else
- for r in (select b.titulo
- from edicoes_livros a, livros b
- where a.id_livro = b.id_livro and a.stock = v_stock)
- loop
- dbms_output.put_line(r.titulo);
- end loop;
- end if;
- exception
- when ex_stock then
- dbms_output.put_line('Stock 0');
- end;
- /
- begin
- procTitulosEdicoesStockMax;
- end;
- /
- /*
- 6. Criar um novo script PL/SQL para implementar uma função, designada funcTitulosAno,
- para retornar os títulos dos livros editados num dado ano.
- A função deve receber, por parâmetro, o ano e tem de retornar um CURSOR do tipo SYS_REFCURSOR.
- Caso o ano recebido seja inválido, a função tem de retornar o valor NULL.
- Testar adequadamente a função implementada através de blocos anónimos.
- */
- create or replace function funcTitulosAno(p_ano integer) return sys_refcursor
- as
- v_ret sys_refcursor;
- begin
- --Consideramos que um ano é inválido se for superior ao atual
- if p_ano > to_char(sysdate, 'yyyy') then
- return null;
- else
- open v_ret for
- select b.titulo
- from edicoes_livros a, livros b
- where a.id_livro = b.id_livro and a.ano_edicao = p_ano;
- return v_ret;
- end if;
- end;
- /
- declare
- c sys_refcursor;
- v_titulo livros.titulo%type;
- begin
- c := funcTitulosAno(2017);
- loop
- fetch c into v_titulo;
- exit when c%notfound;
- dbms_output.put_line(v_titulo);
- end loop;
- end;
- /
- /*
- 7. Criar um novo script PL/SQL para implementar um procedimento, designado procTitulos.
- Este procedimento deve listar os títulos de livros recebidos, por parâmetro,
- num CURSOR do tipo SYS_REFCURSOR. Se este parâmetro for NULL, o procedimento deve mostrar
- uma mensagem apropriada.
- Testar adequadamente o procedimento implementado através de blocos anónimos,
- usando a função criada anteriormente (ponto 6).
- */
- /*
- 8. Criar um novo script PL/SQL para implementar uma função, designada funcAumentarSaldos,
- para adicionar um dado montante ao saldo atual e ao saldo acumulado,
- dos cartões de clientes com mais de 10 anos.
- A função deve receber, por parâmetro, o montante e deve mostrar a quantidade de cartões
- atualizados.
- Caso o montante recebido seja inválido, a função tem de retornar o valor NULL.
- Testar adequadamente a função implementada, usando blocos anónimose o comando ROLLBACK para não afetar a BD.
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement