Hallo,
ich möchte die Tabelle ABFLUG mit Hilfe eines Cursors lesen und ermitteln für alle Tage zwischen dem 13.11.2001 und dem 17.11.2001, an denen mindestens ein Flug startet, die Anzahl der Vormittagsflüge (:= Abflug zwischen 8:00 und 12:00 Uhr) und der Nachmittagsflüge (:= Abflug zwischen 12:00 und 20:00 Uhr).
Für null Flüge kommt diese Text raus: „ – keine Flüge –“:
das Ergebnis soll wie folgt am Bildschirm ausgegeben werden:
13.11.2001: Anzahl der Vormittags-Fluege: 1
13.11.2001: Anzahl der Nachmittags-Fluege: 1
14.11.2001: Anzahl der Vormittags-Fluege: 2
14.11.2001: Anzahl der Nachmittags-Fluege: -keine Flüge-
… etc
Tabelle Abflug:
Datum Zeit
13.11.2011 10h23
13.11.2011 16h55
14.11.2011 08h14
14.11.2011 08h17
15.11.2011 14h45
17.11.2011 08h11
17.11.2011 16h25
so habe ich versucht aber das war leider nicht richtig:::confused:
SET SERVEROUTPUT ON
DECLARE
vor CONSTANT VARCHAR2(30):=’Anzahl der Vormittagsflüge‘;
nach CONSTANT VARCHAR2(30):=’Anzahl der nachmittagsflüge‘;
c NUMBER;
CURSOR abflug_cursor IS
(select ab_datum,ab_zeit,count(ab_zeit) as count from abflug
where ab_zeit < 12
group by ab_datum,ab_zeit)
union all ( select ab_datum,ab_zeit,count(ab_zeit) as count from abflug
where ab_zeit > 12
group by ab_datum,ab_zeit );
ab_datum abflug.ab_datum%TYPE;
ab_zeit abflug.ab_zeit%TYPE;
BEGIN
IF NOT abflug_cursor%ISOPEN
THEN
OPEN abflug_cursor;
END IF;
SELECT count(ab_zeit) INTO c FROM abflug;
LOOP
FETCH abflug_cursor INTO ab_datum,ab_zeit,c;
EXIT WHEN abflug_cursor%NOTFOUND ;
DBMS_OUTPUT.PUT_LINE(‚**************************‘);
IF ab_zeit between 8 and 12 THEN
DBMS_OUTPUT.PUT_LINE(ab_datum||vor||c);
ELSIF ab_zeit between 12 and 21 THEN
DBMS_OUTPUT.PUT_LINE(ab_datum||nach||c);
ELSE
DBMS_OUTPUT.PUT_LINE(ab_datum||’keine Flüge’||c);
END IF;
END LOOP ;
CLOSE abflug_cursor ;
END;
/
Danke