2013-05-09 48 views
0

伊夫一個刪除一個客戶一個相當簡單的過程,它是一個封裝體內的過程。下面是程序運行並刪除客戶代碼:程序刪除只有當數據庫高於目前SYSDATE

PROCEDURE remove_customer (customer_id VARCHAR2) IS 
BEGIN 
DELETE FROM order_line 
WHERE order_line.FK1_order_id in 
(SELECT order_id FROM placed_order 
WHERE placed_order.FK1_customer_id = remove_customer.customer_id 
); 
DELETE FROM placed_order 
WHERE placed_order.FK1_customer_id = remove_customer.customer_id; 
DELETE FROM customer 
WHERE customer.customer_id = remove_customer.customer_id; 
total_customers := total_customers - 1; 
END; 

我要的是隻刪除客戶如果交貨日期已經過去? 所以在上述過程中會出現if語句,我只是不確定如何在何處添加它以及如何添加它。

這將是沿

CREATE PROCEDURE remove_customertest (customer_id VARCHAR2) IS 
BEGIN 
IF placed_order.delivery_date < SYSDATE 
THEN 
DELETE FROM order_line 
WHERE order_line.FK1_order_id in 
(SELECT order_id FROM placed_order 
WHERE placed_order.FK1_customer_id = remove_customer.customer_id 
); 
DELETE FROM placed_order 
WHERE placed_order.FK1_customer_id = remove_customer.customer_id; 
DELETE FROM customer 
WHERE customer.customer_id = remove_customer.customer_id; 
ELSE 
DBMS_OUTPUT.PUT_LINE ('Customer currently has a order been delivered and cant be removed.'); 
END IF; 
END; 

行沒有任何一個有這個,或者如果我在右邊線有什麼建議?

感謝您的幫助,我是相當新的PL/SQL

回答

0

這種情況下,你可以在程序如下的起點加 -

PROCEDURE Remove_Customer(Customer_Id VARCHAR2) IS 
    l_Order_Date DATE; 
BEGIN 
    BEGIN 
    SELECT MAX(Delivery_Date) 
     INTO l_Order_Date 
     FROM Placed_Order 
    WHERE Placed_Order.Fk1_Customer_Id = Customer_Id; 
    EXCEPTION 
    WHEN OTHERS THEN 
     l_Order_Date := SYSDATE - 1; 
    END; 
    IF l_Order_Date < SYSDATE THEN 
    DELETE FROM Order_Line 
    WHERE Order_Line.Fk1_Order_Id IN 
      (SELECT Order_Id 
       FROM Placed_Order 
      WHERE Placed_Order.Fk1_Customer_Id = Customer_Id); 
    DELETE FROM Placed_Order 
    WHERE Placed_Order.Fk1_Customer_Id = Customer_Id; 
    DELETE FROM Customer WHERE Customer.Customer_Id = Customer_Id;  
    --Total_Customers := Total_Customers - 1; -- is it a global variable in the package? 
    ELSE 
    Dbms_Output.Put_Line('Customer currently has a order been delivered'); 
    END IF; 
END; 
+0

HI感謝,我試圖代碼,它只是想出了'無效的sql語句'。我在我的問題中添加了一些代碼,但它不會運行任何想法? – 2013-05-09 10:43:45

+0

我的壞..我剛纔講的位置和一些建議impliment這個邏輯..沒有exect代碼.. – 2013-05-09 11:04:03

+0

它的幫助好感謝和理解 – 2013-05-09 11:33:01