Чаще всего курсоры используются для считывания всех строк активного набора с помощью цикла выборки. Цикл выборки (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 следует проверять для каждой итерации цикла.
< Предыдущая | Следующая > |
---|