我正在尝试创建一个删除与cust_id相关的所有内容的过程。当我在执行过程时输入cust_id时,它会从客户和发票表中删除所有内容,但不会从行表中删除,我不知道原因。这就是我所拥有的
ID. SIP DIP
1. 123.243.0.1 56
2. 123.143.0.1 89
3. 0.16783633 44
4. 123.143.0.1 89
答案 0 :(得分: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
选项的外键,并且根本不使用存储过程。
但是,在大多数国家/地区,您不能像这样删除发票,因此在实施此类删除操作之前,您应该真正检查业务需求。