Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 1.66 KB | None | 0 0
  1. De te verwachten output IS volgens mij fout omdat een simpele SELECT op opnames ons leert dat er 5 verschillende datums zijn die maar 1 keer voorkomen. Er zijn dus meer dan 3 antwoorden.
  2.  
  3. CREATE OR REPLACE
  4. PROCEDURE PERIODE_MINSTE_OPNAMES
  5. IS
  6.  
  7. TYPE type_tab_datums IS TABLE OF opname.datum%TYPE
  8. INDEX BY PLS_INTEGER;
  9. t_datums type_tab_datums;
  10.  
  11. TYPE type_tab_periodes IS TABLE OF periode%ROWTYPE
  12. INDEX BY PLS_INTEGER;
  13. t_periodes type_tab_periodes;
  14.  
  15. t_periode_minste_opnames type_tab_periodes;
  16.  
  17. teller NUMBER;
  18.  
  19. BEGIN
  20.  
  21.   SELECT DISTINCT datum BULK COLLECT INTO t_datums
  22.   FROM opname
  23.   WHERE datum IS NOT NULL
  24.   GROUP BY datum
  25.   HAVING COUNT(datum) <= 1
  26.   ORDER BY datum ASC;
  27.  
  28.   SELECT * BULK COLLECT INTO t_periodes
  29.   FROM PERIODE;
  30.  
  31.   teller := 1;
  32.  
  33.   FOR i IN 1..t_datums.COUNT LOOP
  34.  
  35.     FOR j IN 1..t_periodes.COUNT LOOP
  36.    
  37.       IF t_datums(i) BETWEEN t_periodes(j).begindatum
  38.                       AND t_periodes(j).einddatum THEN
  39.                      
  40.       SELECT * INTO t_periode_minste_opnames(teller)
  41.       FROM periode
  42.       WHERE periode.begindatum = t_periodes(j).begindatum
  43.             AND periode.einddatum = t_periodes(j).einddatum
  44.             AND periode.plaatsnaam = t_periodes(j).plaatsnaam;
  45.      
  46.       teller := teller + 1;
  47.                      
  48.       END IF;
  49.    
  50.     END LOOP;
  51.  
  52.   END LOOP;
  53.  
  54.   FOR i IN 1..t_periode_minste_opnames.COUNT LOOP
  55.     dbms_output.PUT_LINE(t_periode_minste_opnames(i).begindatum || ' ' ||
  56.                           t_periode_minste_opnames(i).einddatum || ' ' ||
  57.                           t_periode_minste_opnames(i).plaatsnaam);
  58.   END LOOP;
  59.  
  60. END PERIODE_MINSTE_OPNAMES;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement