Ниже запрос выполняет массовый выбор, а затем обновляет записи в цикле. Я хочу использовать здесь конструкции BULK COLLECT INTO и FORALL для повышения производительности, но запрос использует rownum для обновления столбца в цикле. Могу ли я использовать BULK COLLECT INTO во время получения rownum?
FOR rec IN
(SELECT rownum rn,
b.*
FROM
(SELECT *
FROM temp_final a
WHERE reid = 1
AND retype = 9
AND sid = 'r123'
AND pid = 2191
ORDER BY a.horder DESC nulls last,
sname ,
rowgroup ,
dpct DESC nulls last ,
name
) b
)
LOOP
UPDATE temp_final
SET horder=rec.rn
WHERE reid = 1
AND retype = 9
AND sid = 'r123'
AND pid = 2191
AND mid =rec.mid;
END LOOP;
Спасибо
rownum
или что угодно еще. Что не работает? - person William Robertson   schedule 26.06.2018ROWID
будет таким же, даже если мы упорядочим записи / строки таблицы. Rowid однозначно определяет адрес каждой строки и не генерируется во время выполнения, какROWNUM
. Google rowid для Oracle, чтобы понять больше. - person Kaushik Nayak   schedule 26.06.2018