在Oracle中使用循环更新

问题描述

BEGIN
 FOR J IN (select DISTINCT  S_NUMBER from WMWHSE3.NUMBER_SHIPTO)
 LOOP
UPDATE wmwhse3.orders
SET
    orders.susr4 = (select S_NUMBER from WMWHSE3.NUMBER_SHIPTO where S_NUMBER = J)
where     orders.c_company = (select SHIPTO from WMWHSE3.NUMBER_SHIPTO where S_NUMBER = J)
and orders.orderkey in (SELECT  a.orderkey FROM wmwhse3.orders a INNER JOIN wmwhse3.wavedetail b ON a.orderkey = b.orderkey where b.wavekey = '0000000086');
  END LOOP;
END;

解决方法

看起来您正在使事情变得过于复杂(并使所有事情都比它本来要慢,因为逐行处理(循环)通常比集合处理要慢得多)。

因此,如果没有PL / SQL,单个update呢?像这样:

update orders o set
  o.susr4 = (select n.s_number
             from number_shipto n
             where n.shipto = o.c_company
            )
where exists (select null from wavedetail b
              where b.orderkey = o.orderkey
                and b.wavekey = '0000000086'
             );

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...