2013-04-24 88 views
0

我目前工作的一個PL/SQL的問題,我必須創建一個程序內的光標,將給予相應的折扣,特定項目(10%價格> = $ 100和5 %價格> = 10美元)。當我不得不打電話給該程序時,我需要在特定訂單號的折扣後顯示訂單號,客戶名字,姓氏和物品的總淨成本(在這種情況下,我需要顯示訂單號2)。我無法讓它顯示這些信息。PL/SQL存儲和調用過程

這裏是我的一個光標創建過程至今代碼。

CREATE OR REPLACE PROCEDURE ComputeOrderTotal 
(no_id IN orders.o_id%TYPE, 
cfirst IN customer.c_first%TYPE, 
clast IN customer.c_last%TYPE, 
TotalNetCost OUT orders.ordertotal%TYPE) IS 

CURSOR OrderCursor IS 
    SELECT order_line.inv_id, inv_price, ol_quantity, inv_price*ol_quantity AS ExtPrice, 
    CASE 
    WHEN inv_price*ol_quantity >= 100 THEN 0.9*(inv_price*ol_quantity) 
    WHEN inv_price*ol_quantity >= 10 THEN 0.95*(inv_price*ol_quantity) 
    ELSE 
    inv_price*ol_quantity 
    END AS NetCost 
    FROM inventory, order_line, orders, customer 
    WHERE orders.o_id = customer.c_id; 
OrderRow OrderCursor%ROWTYPE; 

BEGIN 
OPEN OrderCursor; 
LOOP 
    FETCH OrderCursor INTO OrderRow; 
    EXIT WHEN OrderCursor%NOTFOUND; 
    TotalNetCost :=TotalNetCost + OrderRow.NetCost; 

END LOOP; 


DBMS_OUTPUT.PUT_LINE('Order Number: ' || no_id || 'First Name: ' || cfirst || 'Last Name: ' || 
clast || 'Total Net Cost: ' || TO_CHAR(TotalNetCost, '$0999.99')); 

END; 

這裏是我調用過程的代碼。

DECLARE 
no_id orders.o_id%TYPE; 
cfirst customer.c_first%TYPE; 
clast customer.c_last%TYPE; 
TotalNetCost orders.ordertotal%TYPE; 

BEGIN 
ComputeOrderTotal(2, cfirst, clast, TotalNetCost);  
END; 

感謝您的幫助!

+0

什麼問題? – 2013-04-24 19:20:41

+0

我無法顯示訂單編號2的名字,姓氏和價格 – MSmits23 2013-04-24 19:24:31

+1

[tag:plsql]與[tag:mysql]有什麼關係? – Kermit 2013-04-24 19:30:57

回答

0

我不知道,但作爲你的第二個條件違揹你的第一個條件可能是問題。例如110滿足第一條件,但它也滿足第二條件。

WHEN inv_price*ol_quantity >= 100 THEN 0.9*(inv_price*ol_quantity) 
WHEN inv_price*ol_quantity >= 10 THEN 0.95*(inv_price*ol_quantity) 

我建議改變第二個條件< 100和> = 10

+0

大概晚了一點,但保持良好的工作 – Strawberry 2013-08-05 00:58:08

+0

你是什麼意思? – judge 2013-08-05 01:06:46

+0

這個問題在4月被問過。 – Strawberry 2013-08-05 09:30:00

0

此行添加到代碼中調用的程序的頂部。

改變會話設置serveroutput;