Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.74 KB | None | 0 0
  1. CREATE OR REPLACE PROCEDURE ABONNEMENTVERKOOP
  2. (p_normaal NUMBER DEFAULT 0,
  3. p_onder19 NUMBER DEFAULT 0,
  4. p_onder25 NUMBER DEFAULT 0,
  5. p_boven65 NUMBER DEFAULT 0,
  6. p_verknr verkopen.verknr%TYPE,
  7. p_abnr abonnementtypes.abnr%TYPE,
  8. p_rang zetels.rang_nr%TYPE)
  9. AS
  10.  
  11. v_totaalabos NUMBER;
  12. v_totaalprijs FLOAT;
  13.  
  14. v_normaal FLOAT;
  15. v_onder19 FLOAT;
  16. v_onder25 FLOAT;
  17. v_boven65 FLOAT;
  18.  
  19. TYPE type_rec_prijs IS RECORD
  20. (
  21. leeftijd zeteltarieven.leeftijd%TYPE,
  22. prijs zeteltarieven.prijs%TYPE,
  23. rang_nr zeteltarieven.rang_nr%TYPE
  24. );
  25. r_prijs type_rec_prijs;
  26.  
  27. TYPE type_coll_ticketten
  28. IS TABLE OF type_rec_prijs;
  29.  
  30. t_ticket type_coll_ticketten;
  31.  
  32. CURSOR cur_voorstelling IS
  33. SELECT voorstellingnr
  34. FROM voorstellingen
  35. WHERE abnr = p_abnr;
  36.  
  37. BEGIN
  38.  
  39. v_totaalabos := p_normaal + p_onder19 + p_onder25 + p_boven65;
  40.  
  41. FOR r_voorstelling IN cur_voorstelling
  42. LOOP
  43. IF vrije_zetels_abonnement(r_voorstelling.voorstellingnr,p_rang) < v_totaalabos
  44. THEN
  45. DBMS_OUTPUT.PUT_LINE('Er zijn niet genoeg vrije zetels');
  46. RETURN;
  47. END IF;
  48. END LOOP;
  49.  
  50. INSERT INTO abonementverkopen (abnr, datum_aankoop, rang, verknr)
  51. VALUES((SELECT NVL(MAX(abnr),0) +1 FROM abonementverkopen), sysdate, p_rang, p_verknr);
  52.  
  53.  
  54. /*
  55. SELECT leeftijd,prijs,rang_nr BULK COLLECT INTO t_ticket
  56. FROM ZETELTARIEVEN
  57. WHERE rang_nr = p_rangnr;
  58. */
  59.  
  60. FOR i IN 1..t_ticket.COUNT
  61. LOOP
  62. IF t_ticket(i).leeftijd = 0
  63. THEN
  64. v_normaal := t_ticket(i).prijs*p_normaal;
  65. END IF;
  66. IF t_ticket(i).leeftijd = -19
  67. THEN
  68. v_onder19 := t_ticket(i).prijs*p_onder19;
  69. END IF;
  70. IF t_ticket(i).leeftijd = -25
  71. THEN
  72. v_onder25 := t_ticket(i).prijs*p_onder25;
  73. END IF;
  74. IF t_ticket(i).leeftijd = 65
  75. THEN
  76. v_boven65 := t_ticket(i).prijs*p_boven65;
  77. END IF;
  78. END LOOP;
  79.  
  80. FOR i IN 1..v_totaalabos
  81. LOOP
  82. UPDATE ticketten
  83. SET verknr = p_verknr
  84. WHERE ticketnr =(SELECT MIN(ticketnr)
  85. FROM ticketten
  86. WHERE verknr IS NULL
  87. AND rang_nr = p_rangnr
  88. AND voorstellingen_voorstellingnr = p_voorstellingnr);
  89. END LOOP;
  90.  
  91. v_totaalprijs := (v_normaal + v_onder19 + v_onder25 + v_boven65);
  92.  
  93. INSERT INTO BETALING
  94. VALUES((SELECT NVL(MAX(betalingsnr),0) +1 FROM betaling),sysdate,v_totaalprijs,NULL,p_verknr,NULL);
  95. END ABONNEMENTVERKOOP;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement