2017-04-10 30 views
0

我想創建一個刪除與cust_id相關的所有東西的程序。當我執行程序時輸入cust_id時,它會刪除客戶和發票表中的所有內容,但不會從行表中刪除,我不知道爲什麼。這是我程序從不同的表中刪除

BEGIN 
DELETE FROM CUSTOMER WHERE CUS_CODE = cust_id; 
DELETE FROM INVOICE WHERE INVOICE.CUS_CODE = cust_id; 
DELETE FROM LINE WHERE EXISTS (SELECT * FROM INVOICE WHERE 
INVOICE.INV_NUMBER = LINE.INV_NUMBER AND invoice.CUS_CODE = cust_id); 
END 

回答

0

如果刪除首先從invoices表與客戶相關的所有記錄,那麼exists()運營商不能對任何在line表中的記錄返回true。

最簡單的解決方法是首先反轉刪除順序並從line表中刪除。

一個稍微好一點的解決方案是使用多表中刪除語法刪除所有3代表的匹配記錄用一個語句:

delete invoice, customer, line 
from customer 
left join invoice on customer.cus_code=invoice.cus_code 
left join line on invoice.inv_number=line.inv_number 
where customer.cus_code=cust_id 

但是,最好是使用與外鍵on delete cascade選項集,根本不使用存儲過程。

但是,在大多數國家,您不允許刪除發票,所以您應該在實施此類刪除操作之前真正檢查您的業務需求。

相關問題