是否可以使用oracle中的触发更新2列2个表?

时间:2014-09-20 10:44:43

标签: sql oracle plsql

我创建了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语句

  1. 创建或替换触发器customers_update
  2. 在客户更新customerNumber之前
  3. 每行
  4. 开始
  5. 所以我的问题是如何解决这个问题?

2 个答案:

答案 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的触发器,您可以更新两者,但内部仍然有两个更新,但一个更新功能级别。

如果您有任何问题,请与我们联系。

感谢。