Sql 仅当数据库高于sysdate时删除的过程

Sql 仅当数据库高于sysdate时删除的过程,sql,oracle,plsql,procedure,Sql,Oracle,Plsql,Procedure,我现在有一个删除客户的程序,这是一个相当简单的程序,在包体中。以下是运行和删除客户的过程的代码: 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_custom

我现在有一个删除客户的程序,这是一个相当简单的程序,在包体中。以下是运行和删除客户的过程的代码:

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还是相当陌生的

您可以在过程的开头添加以下条件-

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;

您好,谢谢您,我尝试了代码,它刚刚出现了“无效的sql语句”。我在问题中添加了一些代码,但它也不会运行任何想法?我的错。。我只是告诉大家这个立场和一些建议来实现这个逻辑。。非执行代码..编辑后您是否尝试过此操作?这一次我希望你在编译的时候不会出现任何错误。嗨,是的,这很有效。谢谢你,我选择了一个不同的解决方案,但这也很有效。再次感谢