FOR emp_rec IN c1 LOOP
...
salary_total := salary_total + emp_rec.sal;
END LOOP;
END;
Нужно использовать точечную запись, чтобы сослаться на индивидуальные поля в записи.
Рассмотрим блок PL/SQL ниже, который вычисляет, результаты эксперимента, затем сохраняет результаты в временной таблице. Индекс цикла FOR c1rec неявно объявлен как запись. Его поля хранят все значения столбца, выбранные из курсора c1.
DECLARE
result temp.col1%TYPE;
CURSOR c1 IS
SELECT n1, n2, n3 FROM data_table WHERE exper_num = 1;
BEGIN
FOR c1rec IN c1 LOOP
/* calculate and store the results */
result := c1rec.n2 / (c1rec.n1 + c1rec.n3);
INSERT INTO temp VALUES (result, NULL, NULL);
END LOOP;
COMMIT;
END;
При входе в курсорный цикл FOR, имя курсора не может принадлежать курсору, который был уже открыт оператором OPEN или вложенным курсорным циклом FOR. Перед каждой итерацией цикла FOR, PL/SQL выбирает в неявно объявленную запись, которая является эквивалентной записи, явно объявленной следующим образом:
c1rec c1%ROWTYPE;
Запись определена только внутри цикла. Нельзя обратиться к полям вне цикла. Например, следующая ссылка запрещена:
FOR c1rec IN c1 LOOP
...
END LOOP;
result := c1rec.n2 + 3; -- неправильно
Последовательность операторов внутри цикла выполняется один раз для каждой строки, которая удовлетворяет запрос, связанный с курсором. При выходе из цикла, курсор закрывается автоматически. Это истинно, даже если использовать оператор EXIT ИЛИ GOTO, чтобы оставить цикл преждевременно или если исключение вызвано внутри цикла.
Использование псевдонимов
Поля в неявно объявленной записи содержат значения столбца из наиболее недавно выбранной строкой. Поля имеют те же самые имена как соответствующие столбцы в списке выбора запроса. Но, что случается если единица выбора - выражение? Рассмотрите следующий пример:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.