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