2016-03-29 14 views
-1

車両の車両番号、車両の種類、および現在車両での配送の数を表示するPL/SQLクエリを作成する必要があります。 VIN_NUMBERのカウントが2以上の場合は、検査が必要です。私はカウントを動作させる方法やPL/SQLクエリに正確に入れる場所を知らないし、車両が検査を必要とするかどうかについてifとelse文を行う方法についていくつかのガイダンスが必要である。PL/SQLクエリでカウントを行う方法

VIN_NUMBER(カウントにも使用されます)はDRIVER_DELIVERIESテーブルからのもので、VEHICLE_TYPEはVehicle Tableからのものです。

ここでは、これまでに私のコードです:

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; 

エラーレポート - ORA-06550:行41、列7: PLS-00103:次のいずれかを期待したときにシンボル "LOOP" を発生しました:

06550.0000 - "行%s、列%s:\ n%s" *原因:通常はPL/SQLコンパイル・エラーです。 処置:

ここで私が持つべきサンプルの結果です:

VIN番号:1ZA55858541

はVEHICLE:カッタウェイバンシャーシ

配信回数:2

検査:検査REQUIREDは


VIN番号:1ZA35858543

VEHICLE:ミディアム標準トラック

配信回数:1

検査:REQUIRED検査NOT


VIN番号:1ZA15851545

VEHICLE:平台トラック

配信回数:1

検査:検査は必須ではありません


VIN番号:1ZA35868540

VEHICLE:カッタウェイバンシャーシ

配信回数:1

検査:検査はありません必要です

+0

Googleでは、pl/sql for Oracleでカウントを行う方法は実際には何もありません。 – dfundako

+0

私はまずGoogleを試しましたが、VIN_NUMBER、VEHICLE_TYPEの後にCountを追加する方法を知っておく必要があります。なぜなら、私自身はエラーが発生し、使用したチュートリアルは1行だけです。Count ___ statements。私はこれが正しく機能するために最初のものの後に別のselect文を実行しなければならないと思いますか? –

+0

これはSQLで実行できるはずのもので、PL/SQLプロシージャは必要ありません。 SQLソリューションが可能な場合はいつでも優先する必要があります。 SQL * PlusでDESCRIBE を使用した場合のように、データ構造(入力データを格納する表または列名および型を示す表)を表示すると、SQL問合せのお手伝いができます。しかし質問...それは2つ以上の配達の車を見つけるのに十分ではないかもしれません。最後の検査以来、2回以上の配送をしてはいけませんか?だから、検査に関するデータもどこかに置いておく必要があります。 – mathguy

答えて

1

スニペットの下の希望が役立ちます。下のスニペットに結合条件を組み込んでください。

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; 
関連する問題