在oracle中将结果集中的一个列数据复制到另一个表中的列

问题描述 投票:-1回答:1

我想随机更新表A中的一列(5000行内的100行)和另一个表中的100行列。这样的事情(但在100个记录的循环中):

  update kc7crdtfile 
     set kc7crdtfile.k7748crid = (select y.k7749crid from KC7CTBURQ y where rownum<100)
   where kc7crdtfile.k7749crid IS NULL
     AND kc7crdtfile.k7732sts in (5, 6, 7, 9, 12)
oracle oracle11g
1个回答
0
投票

如果您有一个链接k7748crid以外的两个表的列,则可以使用相关更新。参考:Example

使用上面的内容运行单个更新对于大型记录而言比循环更有效。但是,由于您希望仅更新100行,您还可以使用cursor loop过滤掉更新的值来使用隐式ROWNUM = 1。即使除了k7749crid之外,两个表之间没有链接列。

BEGIN
   FOR rec IN (SELECT y.k7749crid
                 FROM KC7CTBURQ y
                WHERE ROWNUM <= 100)
   LOOP
      UPDATE kc7crdtfile k
         SET k.k7748crid = rec.k7749crid
       WHERE     k.k7749crid IS NULL
             AND k.k7732sts IN (5,
                                6,
                                7,
                                9,
                                12)
             AND NOT EXISTS
                    (SELECT 1
                       FROM kc7crdtfile k2
                      WHERE     k2.k7748crid = k.k7748crid
                            AND k2.k7749crid IS NULL
                            AND k2.k7732sts IN (5,
                                                6,
                                                7,
                                                9,
                                                12))
             AND ROWNUM = 1;
   END LOOP;
END;
/
© www.soinside.com 2019 - 2024. All rights reserved.