Pl/sql


Ansicht von 5 Beiträgen - 1 bis 5 (von insgesamt 5)
  • Autor
    Beiträge
  • #109254
    leo_oracle
    Teilnehmer

    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

    #128330
    Angela
    Moderator

    Was soll an den Tagen ausgegeben werden, an denen gar keine Flüge stattfanden (z.B. 16.11.2011)?

    Wenn für diese Tage nichts ausgegeben werden soll, ist es am einfachsten, Du machst einen Cursor, der die einzelnen Datumswerte gruppiert zurückliefert. Diesen läufst Du durch und zählst die Anzahl der Flüge vormittags und nachmittags.

    #128332
    leo_oracle
    Teilnehmer

    @Angela 85345 wrote:

    Was soll an den Tagen ausgegeben werden, an denen gar keine Flüge stattfanden (z.B. 16.11.2011)?

    Wenn für diese Tage nichts ausgegeben werden soll, ist es am einfachsten, Du machst einen Cursor, der die einzelnen Datumswerte gruppiert zurückliefert. Diesen läufst Du durch und zählst die Anzahl der Flüge vormittags und nachmittags.

    am 16.11.2001 gibt es überhaupt keine Flüge, aber das geht nicht darum.
    Ausgabe soll wie o.g ausgegeben werden.
    gruss

    #128329
    Angela
    Moderator

    Dann machst Du es am besten wie oben beschrieben:

    Einen Cursor, der Dir das Datum aus der Tabelle „Abflug“ gruppiert liefert, d.h. 1 Datum pro Tag. Damit machst Du 2 Selects, die Dir die Anzahl der Flüge vor 12 und die nach 12 liefern. Ergibt der count 0, setzt Du eine Variable auf „keine Fluege“, ansonsten auf den Wert, den der Select geliefert hat.

    #128331
    iche
    Teilnehmer

    Ach angela… An

    Quote:
    am 16.11.2001 gibt es überhaupt keine Flüge, aber das geht nicht darum.
    Ausgabe soll wie o.g ausgegeben werden.

    hättest du aber darauf kommen können, dass abfragestrukturen noch nicht dran waren:)
    Liebes leo oracle… Angela weiß schon, wovon sie da schreibt… Und wenn du auf hilfe aus bist, solltest du die antworten genau lesen und die richtigen schlüsse ziehen… wenn man nämlich solche empty sets nicht von vorn herein richtig handelt, hat man hinterher einen haufen probleme.
    Weiterhin sei angemerkt, dass man in der query zuerst nur die gesamten flüge holen und aus diesem set dann erst nach der zeit filtern sollte. Bei den 5 datensätzen ist es kein thema, aber wenn in der tabelle abertausende records wären, bremst es andersrum die performance des servers… Das einschränkendste kriteium sollte immer am schluss stehen.

    Man umgebe mich mit Luxus, auf das Notwendige kann ich verzichten. (Oscar Wilde)

Ansicht von 5 Beiträgen - 1 bis 5 (von insgesamt 5)
  • Das Forum „Anwendungsentwickler“ ist für neue Themen und Antworten geschlossen.
Momentan aktive Benutzer: 0
No users are currently active
Aktive Benutzer in den letzten 24 Stunden: 0
Keymaster | Moderator | Participant | Spectator | Blocked
Additional Forum Statistics
Threads: 1.488, Posts: 22.646, Members: 11.010
Welcome to our newest member, lonnielunceford
Most users ever online was 5 on 16. September 2020 22:11