首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以使用oracle中的触发来更新2个表的2列?

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

Stack Overflow用户
提问于 2014-09-20 10:44:42
回答 2查看 937关注 0票数 1

我创建了三个名为customers、payments和orders.They的表,它们的列名相同,orders.They是 customers 表的主键,是 payments orders table.Now的外键,我想做一个触发器,它的工作是在更新customers表中的customerNumber之前更新支付和订单表中的customerNumber。

我的密码在这里:

代码语言:javascript
运行
复制
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. 开始

所以我的问题是我怎么解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-20 11:32:30

只需使用两个update语句:

代码语言:javascript
运行
复制
update payments
    set customerNumber = :new.customerNumber
    where payments.customerNumber = :old.customerNumber;

update orders 
    set customerNumber = :new.customerNumber
    where orders.customerNumber = :old.customerNumber;

Oracle不允许更新同一语句中的两个表。

票数 2
EN

Stack Overflow用户

发布于 2014-09-20 23:37:31

"Oracle不允许更新同一语句中的两个表。“

这是真的,但是如果你真的喜欢,你可以创建一个视图并更新视图。

使用带有类型的触发器来代替,您可以同时更新这两种类型,但是仍然可以在内部进行两次更新,但是有一次更新的是功能级别。

如果你有任何问题,请告诉我。

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25947918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档