0

ユーザーがアイテム番号を入力するクエリがあり、クエリはアイテム番号とアイテムの説明を表示し、ループに入り、データベース内のすべてのアイテム番号の情報を表示します。ループの最後に、クエリは表示されたアイテムに基づいて在庫の合計量を表示します。

ループが始まる前にアイテム番号とアイテムの説明を表示するにはどうすればよいですか? その一部を除いて、すべてが正常に機能しています。

商品番号: 5 商品説明: シャツ。商品番号と商品説明のデータがありません。

PL/SQL クエリ:

SET SERVEROUTPUT ON
DECLARE
    CURSOR C1 
    IS
    SELECT items.items_numbers, items_description, items_size, items_price, items_qoh, sum(items_price*items_qoh) "Value" FROM inventories
    JOIN items ON inventories.items_number=items.items_numbers
    WHERE items.items_numbers='&enter_items_number'
    GROUP BY items.items_numbers, items_description, items_size, items_color, items_price, items_qoh
    ORDER BY items_price;

    totalvalue NUMBER(8,2); 
    test1 C1%rowtype;

    BEGIN
    OPEN C1;
    totalvalue:=0;  
    DBMS_OUTPUT.PUT_LINE('items ID: '  || test1.items_number ||  'items Description: ' ||  test1.items_description);
    close C1;
    open C1;
    LOOP

    fetch C1 into test1;
    exit when c1%notfound;

    DBMS_OUTPUT.PUT_LINE('Size: ' || test1.items_size);
    DBMS_OUTPUT.PUT_LINE('Price: ' || test1.items_price);
    DBMS_OUTPUT.PUT_LINE('QOH: ' || test1.items_qoh);
    DBMS_OUTPUT.PUT_LINE('Value: ' || test1.items_qoh*test1.items_price);
    totalvalue:=totalvalue+test1.items_qoh*test1.items_price;
    END LOOP;   

DBMS_OUTPUT.PUT_LINE('TOTAL VALUE: '  || totalvalue);

END;
/

出力:

 Item Number: Item Description:
 Size: S
 Price: 25.00
 QOH: 25
 Value: 625.0
 Size: L
 Color: Blue
 Price: 30.00
 QOH: 100
 Value: 3000.0
 TOTAL VALUE: 3625.0
4

1 に答える 1

2

ループ内で開いているカーソルからデータをフェッチするのと同じように、ループの前にデータをフェッチして出力できるようにする必要があります。現在、カーソルを開いてから閉じるだけで、カーソルからフェッチすることはありません。行をフェッチできたかどうかを確認してください (c1%notfound で行ったように)。

于 2012-10-08T19:48:07.433 に答える