2014-02-26 52 views
1

我是一個初學者,當涉及到PL SQL。以下是我想要做的:PL/SQL遊標比較

我在一個過程中創建了兩個遊標。第一個返回產品ID和特定產品在名爲Order_Details的表內訂購的次數的總和。

第二個遊標只是返回不同表中的產品ID以及名爲Qty_Ordered的空列。

我需要比較兩個遊標,以便在BOTH遊標中返回產品ID時,qty_ordered列中的空字段爲update(位於相應產品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

不確定你的意圖是什麼與該參數。 – APC

+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

+0

我不確定這段代碼應該是什麼意思...對不起,我的知識是補救措施,但是當我嘗試執行它時,此查詢不僅返回錯誤 –

+0

對不起,我錯過了別名ORDER BY和GROUP BY。 – APC