Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. set serveroutput on;
  2. /*
  3. 4. Criar um script com código PL/SQL para implementar uma função, designada funcStockMax.
  4. A função deve retornar o maior stock das edições dos livros da livraria.
  5. Testar adequadamente a função implementada, através de blocos anónimos.
  6. */
  7. create or replace function funcStockMax return edicoes_livros.stock%type
  8. as
  9. v_max edicoes_livros.stock%type;
  10. begin
  11. select max(stock) into v_max
  12. from edicoes_livros;
  13. return v_max;
  14. end;
  15. /
  16.  
  17. declare
  18. x edicoes_livros.stock%type;
  19. begin
  20. x := funcStockMax;
  21. dbms_output.put_line(x);
  22. end;
  23. /
  24. /*
  25. 5. Criar um novo script PL/SQL para implementar um procedimento, designado procTitulosEdicoesStockMax.
  26. O procedimento deve listar os títulos das edições dos livros que têm o maior stock.
  27. Caso o stock seja zero, deve ser apresentada uma mensagem apropriada, usando o mecanismo
  28. de exceções. Testar adequadamente o procedimento implementado, através de blocos anónimos.
  29. */
  30. create or replace procedure procTitulosEdicoesStockMax
  31. as
  32. v_stock edicoes_livros.stock%type;
  33. ex_stock exception;
  34. begin
  35. v_stock := funcStockMax;
  36. if v_stock = 0 then
  37. raise ex_stock;
  38. else
  39. for r in (select b.titulo
  40. from edicoes_livros a, livros b
  41. where a.id_livro = b.id_livro and a.stock = v_stock)
  42. loop
  43. dbms_output.put_line(r.titulo);
  44. end loop;
  45. end if;
  46. exception
  47. when ex_stock then
  48. dbms_output.put_line('Stock 0');
  49. end;
  50. /
  51.  
  52. begin
  53. procTitulosEdicoesStockMax;
  54. end;
  55. /
  56. /*
  57. 6. Criar um novo script PL/SQL para implementar uma função, designada funcTitulosAno,
  58. para retornar os títulos dos livros editados num dado ano.
  59. A função deve receber, por parâmetro, o ano e tem de retornar um CURSOR do tipo SYS_REFCURSOR.
  60. Caso o ano recebido seja inválido, a função tem de retornar o valor NULL.
  61. Testar adequadamente a função implementada através de blocos anónimos.
  62. */
  63. create or replace function funcTitulosAno(p_ano integer) return sys_refcursor
  64. as
  65. v_ret sys_refcursor;
  66. begin
  67. --Consideramos que um ano é inválido se for superior ao atual
  68. if p_ano > to_char(sysdate, 'yyyy') then
  69. return null;
  70. else
  71. open v_ret for
  72. select b.titulo
  73. from edicoes_livros a, livros b
  74. where a.id_livro = b.id_livro and a.ano_edicao = p_ano;
  75. return v_ret;
  76. end if;
  77. end;
  78. /
  79. declare
  80. c sys_refcursor;
  81. v_titulo livros.titulo%type;
  82. begin
  83. c := funcTitulosAno(2017);
  84. loop
  85. fetch c into v_titulo;
  86. exit when c%notfound;
  87. dbms_output.put_line(v_titulo);
  88. end loop;
  89. end;
  90. /
  91.  
  92. /*
  93. 7. Criar um novo script PL/SQL para implementar um procedimento, designado procTitulos.
  94. Este procedimento deve listar os títulos de livros recebidos, por parâmetro,
  95. num CURSOR do tipo SYS_REFCURSOR. Se este parâmetro for NULL, o procedimento deve mostrar
  96. uma mensagem apropriada.
  97. Testar adequadamente o procedimento implementado através de blocos anónimos,
  98. usando a função criada anteriormente (ponto 6).
  99. */
  100. /*
  101. 8. Criar um novo script PL/SQL para implementar uma função, designada funcAumentarSaldos,
  102. para adicionar um dado montante ao saldo atual e ao saldo acumulado,
  103. dos cartões de clientes com mais de 10 anos.
  104. A função deve receber, por parâmetro, o montante e deve mostrar a quantidade de cartões
  105. atualizados.
  106. Caso o montante recebido seja inválido, a função tem de retornar o valor NULL.
  107. Testar adequadamente a função implementada, usando blocos anónimose o comando ROLLBACK para não afetar a BD.
  108. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement