2013-07-19 2 views
-3

меня попросили на моем ученичестве следующего вопроса: Почему запрос типа:Оптимизация для цикла в оракуле

FOR i in (SELECT * FROM TABELKA) LOOP 

не является эффективным? Как изменить его, чтобы сделать его более эффективным?

Дальнейшая информация не добавляется.

+0

Какова ваша цель? –

+0

Мне сказали, что это не эффективно, и я должен изменить этот запрос. Я думал об использовании курсоров вместо этого цикла и изменял select * в select col1, col2 и т. Д. – Ragnar

+0

, что я не имел в виду. почему у вас есть цикл для выбора всех записей в таблице? –

ответ

1

Собрать, все данные сразу, в коллекцию. Boom! Один запрос, и у вас есть все без циклов.

SELECT * 
BULK COLLECT INTO a_collection_type_variable 
FROM a_table; 
+0

О, спасибо! Это все, что мне нужно! – Ragnar

+4

Это, вероятно, не очень хороший совет. Oracle 10g + автоматически будет собирать этот тип цикла. –

+3

, если вы не хотите прокручивать 10 миллионов строк ... Массовый сбор не всегда является заменой для цикла курсора. С большими наборами, вероятно, нужен курсор + объемный сбор с лимитом. – tbone

Смежные вопросы