我是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
答案 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。