我创建了3个表,其名称为客户,付款和订单。它们具有相同的列名 customerNumber 。 customerNumber 是客户的主键表格和付款和订单表格的国外。现在我想制作一个触发器,其工作是在更新customers表中的customerNumber之前更新payment和orders表中的customerNumber
我的代码在这里:
create or replace trigger customers_update
before update of customerNumber on customers
for each row
begin
update payments,orders
set
payments.customerNumber = :new.customerNumber
orders.customerNumber = :new.customerNumber
where (payments.customerNumber = :old.customerNumber)
and
(orders.customerNumber = :old.customerNumber);
end;
/
但它显示了一些像这样的问题
第2行出错:PL / SQL:忽略SQL语句
所以我的问题是如何解决这个问题?
答案 0 :(得分:2)
只需使用两个更新语句:
update payments
set customerNumber = :new.customerNumber
where payments.customerNumber = :old.customerNumber;
update orders
set customerNumber = :new.customerNumber
where orders.customerNumber = :old.customerNumber;
Oracle不允许对同一语句中的两个表进行更新。
答案 1 :(得分:0)
" Oracle不允许对同一语句中的两个表进行更新。"
这是真的,但如果你真的喜欢,你可以创建一个视图并更新视图。
使用类型为INSTEAD OF的触发器,您可以更新两者,但内部仍然有两个更新,但一个更新功能级别。
如果您有任何问题,请与我们联系。
感谢。