我创建了三个名为customers、payments和orders.They的表,它们的列名相同,orders.They是 customers 表的主键,是 payments 和 orders table.Now的外键,我想做一个触发器,它的工作是在更新customers表中的customerNumber之前更新支付和订单表中的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语句
所以我的问题是我怎么解决这个问题?
发布于 2014-09-20 03:32:30
只需使用两个update语句:
update payments
set customerNumber = :new.customerNumber
where payments.customerNumber = :old.customerNumber;
update orders
set customerNumber = :new.customerNumber
where orders.customerNumber = :old.customerNumber;
Oracle不允许更新同一语句中的两个表。
发布于 2014-09-20 15:37:31
"Oracle不允许更新同一语句中的两个表。“
这是真的,但是如果你真的喜欢,你可以创建一个视图并更新视图。
使用带有类型的触发器来代替,您可以同时更新这两种类型,但是仍然可以在内部进行两次更新,但是有一次更新的是功能级别。
如果你有任何问题,请告诉我。
谢谢。
https://stackoverflow.com/questions/25947918
复制