2012-10-08 126 views
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 

回答

2

就像你从内环路打开的游标获取数据,你必须在循环之前获取数据能够打印它。现在你只打开光标并关闭它,而不从中取出。注意检查你是否能够获取一行或不行(就像你没有找到c1%一样)。