DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Циклы выборки курсора

Чаще всего курсоры используются для считывания всех строк активного набора с помощью цикла выборки. Цикл выборки (fetch loop) — это обыч­ный цикл, в котором строки активного набора обрабатываются по поряд­ку, одна за другой. Ниже рассматривается несколько различных типов циклов выборки курсоров и их применение.

Простые циклы
В этих циклах для обработки курсора используется синтаксис простого цикла (LOOP...END LOOP). Количество итераций задается с помощью атрибутов явного курсора. Рассмотрим пример:
Обратите внимание, что оператор EXIT WHEN расположен сразу после оператора FETCH. После извлечения последней строки  %NOTFOUND становится истинным и осуществляется выход из цикла. Кроме того, оператор EXIT WHEN указывается перед фрагментом обработки дан­ных. Это делается для того, чтобы не обрабатывались строки NULL.
А теперь посмотрим, что произойдет, если перенести оператор EXIT WHEN в конец цикла:

Теперь при последнем считывании переменные vFirstName и v_LastName не будут модифицированы, так как строк в активном наборе больше нет. Следовательно, в выходных переменных будут содержаться значения, соответствующие ранее считанным строкам. Из-за того что про­верка выполняется после обработки данных, эти дублирующие значения будут введены в таблицы registered_students и tempjtable, что даст не тот результат, который нужен.


Циклы WHILE
Этот цикл выборки действует точно так же, как и цикл LOD1- ...hNL) LOOP (см. выше). Обратите внимание, что оператор FETCH появляется дважды — один раз перед циклом и один раз после обработки данных. Условие c_HistoryStudents%FOUND следует проверять для каждой итерации цикла.
 









jAntivirus