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

时间:2018-03-06 07:56:56

标签: oracle oracle11g

我想随机更新表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)

1 个答案:

答案 0 :(得分: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;
/