Oracle多表联合更新

以下是在后台更新易拓ERP数据库时遇到的一个问题:

1.在DB14数据库中将料件号P44开头,并且品名为"塑料袋"的料件改为消耗性料件.
          这个简单:  UPDATE DB14.ima_file SET ima70 = ‘Y’ WHERE ima01 like ‘P44%’ AND ima02 = ‘塑料袋’;

2.在以B021开头的工单中,相应的下介料件的消耗性状态也作相应变更. 这个麻烦涉及bmb表和ima表才能确定要更改的记录(因为限定了品名).不能直接用UPDATE,最后写了一个存储过程如下:

DECLARE CURSOR my_table IS (SELECT bmb01,bmb03
  FROM DB14.bmb_file,DB14.ima_file
  WHERE bmb03 = ima01
  AND bmb01 LIKE 'B021%'
  AND bmb03 LIKE 'P44%' AND ima02 = '塑料袋'); 
  BEGIN 
    FOR tab IN my_table LOOP 
      UPDATE DB14.bmb_file 
             SET bmb15 = 'Y' 
             WHERE bmb01 = tab.bmb01 AND bmb03 = tab.bmb03; 
    END LOOP; 
  END;

这样一来要是还有相同条件下的其他表要更新的话,可直接在FOR LOOP里面加上.

最后,其实我也是傻了.单就解决现有问题而言完全可以:
  UPDATE DB14.bmb_file SET bmb15 = 'Y'
  WHERE bmb01 LIKE 'B021%'
                AND bmb03 IN (SELECT ima01
                                            FROM DB14.ima_file 
                                            WHERE ima01 LIKE 'P44%'  
                                                        AND ima02 = '塑料袋');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值