Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE PROCEDURE ABONNEMENTVERKOOP
- (p_normaal NUMBER DEFAULT 0,
- p_onder19 NUMBER DEFAULT 0,
- p_onder25 NUMBER DEFAULT 0,
- p_boven65 NUMBER DEFAULT 0,
- p_verknr verkopen.verknr%TYPE,
- p_abnr abonnementtypes.abnr%TYPE,
- p_rang zetels.rang_nr%TYPE)
- AS
- v_totaalabos NUMBER;
- v_totaalprijs FLOAT;
- v_normaal FLOAT;
- v_onder19 FLOAT;
- v_onder25 FLOAT;
- v_boven65 FLOAT;
- TYPE type_rec_prijs IS RECORD
- (
- leeftijd zeteltarieven.leeftijd%TYPE,
- prijs zeteltarieven.prijs%TYPE,
- rang_nr zeteltarieven.rang_nr%TYPE
- );
- r_prijs type_rec_prijs;
- TYPE type_coll_ticketten
- IS TABLE OF type_rec_prijs;
- t_ticket type_coll_ticketten;
- CURSOR cur_voorstelling IS
- SELECT voorstellingnr
- FROM voorstellingen
- WHERE abnr = p_abnr;
- BEGIN
- v_totaalabos := p_normaal + p_onder19 + p_onder25 + p_boven65;
- FOR r_voorstelling IN cur_voorstelling
- LOOP
- IF vrije_zetels_abonnement(r_voorstelling.voorstellingnr,p_rang) < v_totaalabos
- THEN
- DBMS_OUTPUT.PUT_LINE('Er zijn niet genoeg vrije zetels');
- RETURN;
- END IF;
- END LOOP;
- INSERT INTO abonementverkopen (abnr, datum_aankoop, rang, verknr)
- VALUES((SELECT NVL(MAX(abnr),0) +1 FROM abonementverkopen), sysdate, p_rang, p_verknr);
- /*
- SELECT leeftijd,prijs,rang_nr BULK COLLECT INTO t_ticket
- FROM ZETELTARIEVEN
- WHERE rang_nr = p_rangnr;
- */
- FOR i IN 1..t_ticket.COUNT
- LOOP
- IF t_ticket(i).leeftijd = 0
- THEN
- v_normaal := t_ticket(i).prijs*p_normaal;
- END IF;
- IF t_ticket(i).leeftijd = -19
- THEN
- v_onder19 := t_ticket(i).prijs*p_onder19;
- END IF;
- IF t_ticket(i).leeftijd = -25
- THEN
- v_onder25 := t_ticket(i).prijs*p_onder25;
- END IF;
- IF t_ticket(i).leeftijd = 65
- THEN
- v_boven65 := t_ticket(i).prijs*p_boven65;
- END IF;
- END LOOP;
- FOR i IN 1..v_totaalabos
- LOOP
- UPDATE ticketten
- SET verknr = p_verknr
- WHERE ticketnr =(SELECT MIN(ticketnr)
- FROM ticketten
- WHERE verknr IS NULL
- AND rang_nr = p_rangnr
- AND voorstellingen_voorstellingnr = p_voorstellingnr);
- END LOOP;
- v_totaalprijs := (v_normaal + v_onder19 + v_onder25 + v_boven65);
- INSERT INTO BETALING
- VALUES((SELECT NVL(MAX(betalingsnr),0) +1 FROM betaling),sysdate,v_totaalprijs,NULL,p_verknr,NULL);
- END ABONNEMENTVERKOOP;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement