2016-03-29 13 views
-1

Ich muss eine PL/SQL-Abfrage erstellen, die die Fahrzeugnummer, den Fahrzeugtyp und die Anzahl der aktuellen Lieferungen mit dem Fahrzeug anzeigt. Und wenn die VIN_NUMBER eine Anzahl von 2 oder mehr hat, dann erfordert sie eine Inspektion. Ich weiß nicht, wie man die Zählung funktioniert oder wo genau es in eine PL/SQL-Abfrage eingefügt wird, und ich brauche auch eine Anleitung, wie man die if-und-else-Aussagen darüber macht, ob das Fahrzeug überprüft werden muss oder nicht .Wie zähle ich in PL/SQL? Abfrage

Die VIN_NUMBER (wird auch für die Zählung verwendet) kommt aus der Tabelle DRIVER_DELIVERIES und der VEHICLE_TYPE kommt aus der Fahrzeug Tabelle.

Hier ist mein Code so weit:

DECLARE 
    VINNUM VARCHAR2(20); 
    VEH  VARCHAR2(30); 
    INSPECTION VARCHAR2(30); 
    CNT NUMBER(2); 
    BEGIN 
    FOR i IN 
    (
    SELECT 
     VIN_NUMBER, 
     VEHICLE_TYPE, 
     INSPECTION, 
     COUNT(*) CNT 
     INTO 
     VINNUM, VEH 
    FROM 
     DRIVER_DELIVERIES, 
     VEHICLE 
    WHERE DRIVER_DELIVERIES.VIN_NUMBER = VEHICLE.VIN_NUMBER 
    GROUP BY 
     VIN_NUMBER, 
     VEHICLE_TYPE, 
     INSPECTION 
) 
    LOOP 

    IF i.CNT >= 2 THEN 

     DBMS_OUTPUT.PUT_LINE('VIN NUMBER : ' ||I.VIN_NUMBER); 
     DBMS_OUTPUT.PUT_LINE('VEHICLE : ' ||I.VEHICLE_TYPE); 
     DBMS_OUTPUT.PUT_LINE('DELIVERY COUNT: ' ||I.CNT); 
     DBMS_OUTPUT.PUT_LINE('INSPECTION : ' ||I."Inspection Required"); 

     if count <2 THEN 
     DBMS_OUTPUT.PUT_LINE('VIN NUMBER : ' ||I.VIN_NUMBER); 
     DBMS_OUTPUT.PUT_LINE('VEHICLE : ' ||I.VEHICLE_TYPE); 
     DBMS_OUTPUT.PUT_LINE('DELIVERY COUNT: ' ||I.CNT); 
     DBMS_OUTPUT.PUT_LINE('INSPECTION : ' ||I."Inspection Not Required"); 

    END IF ; 
    END LOOP; 
END; 

Fehlerbericht - ORA-06550: Zeile 41, Spalte 7: PLS-00103: Fand das Symbol "LOOP", wenn eines der folgenden erwartet:

wenn 06550. 00000 - "Zeile% s, Spalte% s: \ n% s" * Ursache: Normalerweise ein PL/SQL-Kompilierungsfehler. * Aktion:

Hier ist die Probenergebnisse, die ich haben sollte:

VIN-Nummer: 1ZA55858541

FAHRZEUG: Cutaway van Chassis

DELIVERY COUNT: 2

Inspektion: Überprüfung erforderlich


VIN-Nummer: 1ZA35858543

FAHRZEUG: Medium Standard LKW

DELIVERY COUNT: 1

Prüfung: Prüfung nicht erforderlich


VIN-Nummer: 1ZA15851545

FAHRZEUG: Pritsche

DELIVERY COUNT: 1

Prüfung: Prüfung NICHT

ERFORDERLICH

VIN-Nummer: 1ZA35868540

FAHRZEUG: Cutaway van Chassis

DELIVERY COUNT: 1

Prüfung: Prüfung NICHT ERFORDERLICH

+0

Es gibt wirklich nichts auf Google für eine Zählung in pl/SQL für Oracle? – dfundako

+0

Ich habe zuerst google versucht, aber ich muss wissen, wie man den Count nach VIN_NUMBER, VEHICLE_TYPE hinzufügt, weil, wenn ich versuche, es selbst zu tun, ich einen Fehler bekomme und die Tutorials, die ich verwendet habe, sind nur eine Zeile Wählen Sie Count ___ Anweisungen. Ich denke, ich muss nach dem ersten noch eine Auswahl treffen, damit das richtig funktioniert? –

+0

Dies sieht aus wie etwas, was Sie in SQL tun können, sollte keine PL/SQL-Prozedur benötigt werden. Wann immer eine SQL-Lösung möglich ist, sollte sie bevorzugt werden. Wenn Sie uns die Datenstruktur (Tabelle oder Tabellen zum Speichern der Eingabedaten mit Spaltennamen und -typen, wie Sie sie in SQL * Plus mit DESCRIBE erhalten konnten) zeigen, können wir Ihnen bei einer SQL-Abfrage helfen. Frage aber ... es kann nicht genug sein, Fahrzeuge mit 2 oder mehr Lieferungen zu finden. Sollten das nicht 2 oder mehr Lieferungen SEIT DER LETZTEN INSPEKTION sein? Also müssen Sie auch irgendwo Daten über Inspektionen haben. – mathguy

Antwort

1

Hope unten Snippet hilft. Bitte fügen Sie die Join-Bedingung in das folgende Snippet ein.

BEGIN 
    FOR I IN 
    (SELECT VIN_NUMBER, 
    VEHICLE_TYPE, 
    INSPECTION, 
    COUNT(DELIVERY) CNT 
    FROM DRIVER_DELIVERIES, 
    VEHICLE 
    WHERE   < 
    JOIN CONDITION> -- Please provide join condition 
    GROUP BY VIN_NUMBER, 
    VEHICLE_TYPE, 
    INSPECTION 
) 
    LOOP 
    DBMS_OUTPUT.PUT_LINE('VIN NUMBER : ' ||I.VIN_NUMBER); 
    DBMS_OUTPUT.PUT_LINE('VEHICLE : ' ||I.VEHICLE_TYPE); 
    DBMS_OUTPUT.PUT_LINE('DELIVERY COUNT: ' ||I.CNT); 
    DBMS_OUTPUT.PUT_LINE('INSPECTION : ' ||I.INSPECTION); 
    END LOOP; 
END; 
Verwandte Themen