Вам не нужен массовый сбор, то, что пытается сделать ваше обновление pl / sql, можно переписать в виде одного оператора MERGE INTO
, что будет намного эффективнее, чем использование FORALL
. Если вы все еще настаиваете на использовании forall, вы можете преобразовать этот MERGE в блок forall.
MERGE INTO temp_final tgt USING (
SELECT rowid,
ROW_NUMBER() OVER(
ORDER BY
horder DESC NULLS LAST,sname,rowgroup,dpct DESC NULLS LAST,name
) rn
FROM
temp_final
WHERE
reid = 1
AND retype = 9
AND sid = 'r123'
AND pid = 2191
)
src ON ( tgt.rowid = src.rowid )
WHEN MATCHED THEN UPDATE SET tgt.horder = src.rn;