PL / SQL游标比较

时间:2014-02-26 22:54:39

标签: sql oracle plsql oracle11g

我是pl sql的初学者。这就是我想要做的事情:

我在一个过程中创建了两个游标。第一个返回产品ID和在名为Order_Details的表中从特定产品订购的总次数。

第二个游标只返回另一个表中的产品ID以及一个名为Qty_Ordered的空列。

我需要比较两个游标,以便在BOTH游标中返回产品ID时,qty_ordered列中的空字段将更新(相应的产品ID旁边)。如果在第二个游标中找到产品ID但不是第一个,则表示产品尚未订购,该产品的qty_ordered应为零。

正如我所说,我是新人,所以请不要太苛刻。我不确定这个循环结构应该是什么样的......

这就是我所拥有的:

CREATE OR REPLACE PROCEDURE ex5b_add_quantities
     (qty_ordered in number) is

    CURSOR ORD_CURSOR is
        SELECT PRODUCT_ID as "ID", sum (QUANTITY) as "Qty_Ordered"
        FROM ORDER_DETAILS
        group by PRODUCT_ID
        order by PRODUCT_ID;

    CURSOR PROD_CURSOR is
        SELECT PRODUCT_ID as "ID", QTY_ORDERED
        FROM Product
        group by PRODUCT_ID, QTY_ORDERED
        order by PRODUCT_ID;

BEGIN

1 个答案:

答案 0 :(得分:2)

你不想要一个循环,你想要一个外连接。

select p.product_id as ID
       , sum(nvl(o.quantity , 0)) as QTY_ORDERED
from product p
     left join order_details o
          on p.product_id = o.product_id
group by p.product_id 
order by p.product_id;

查看强制性SQL Fiddle here