DeepEdit!

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

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

Обработка явных курсоров

Для обработки явного курсора в PL/SQL необходимо выполнить четыре
действия:
1. Объявить курсор.
Открыть курсор для запроса.
Выбрать результаты в переменные PL/SQL.
Закрыть курсор.
Объявление курсора является единственным действием, которое вы­полняется в разделе объявлений блока. Другие три действия производятся в выполняемом разделе или в разделе исключительных ситуаций.
Объявление курсора
При объявлении курсора ему назначается имя и ставится в соответствие некоторый оператор SELECT. Синтаксис объявления курсора:
CURSOR имя_курсорс IS onepamop_SELECT
где        — это имя курсора, a onepamop_SELEG. — запрос, который
будет обрабатываться. Что касается области действия и области видимо­сти, то курсоры отвечают стандартным правилам, установленным для идентификаторов PL/SQL (см. главу 3). Так как имя курсора является идентификатором PL/SQL, оно должно быть объявлено до того, как на него будет произведена ссылка. Можно использовать любые операторы SELECT, в том числе соединения (join) и операторы, в состав которых входят конструкции UNION (объединение) и MINUS (минус).
Внимание
| Конструкция INTO не входит в состав оператора SELECT, а является частью оператора FETCH.
При объявлении курсора можно указывать переменные PL/SQL, кото­рые рассматриваются в качестве переменных привязки. Для курсоров справедливы обычные правила по определению области действия, поэто­му эти переменные должны быть видимы в точке объявления курсора. Например, ниже приводится правильный раздел объявлений:
Для гарантии        что все переменные, на которые производятся
ссылки при объявлении курсора, уже объявлены, рекомендуется создавать все курсоры в конце раздела объявлений. В данной книге соблюдается это соглашение. Единственным исключением может быть ситуация, когда имя курсора указывается в ссылке — например, в атрибуте %ROWTYPE. (при со­здании записи с полями, соответствующими списку выбора курсора). В этом случае курсор должен быть объявлен до того, как на него будет произ­ведена ссылка.
Открытие курсора
Курсор открывается следующим образом:
OPEN имя_курсора;
где имя_курсорa идентифицирует предварительно объявленный курсор. Когда курсор открывается, происходит следующее:
•        Анализируются значения переменных привязки.
•        На основе значений переменных привязки и содержимого таблиц к которым обращается запрос, определяется активный набор.
•        Указатель активного набора устанавливается на первую строку.
Переменные привязки анализируются только во время открытия кур­сора. Для примера рассмотрим следующий блок PL/SQL:
При открытии курсора c_Building в переменных v_Department и v_Course содержатся соответственно 'HIS' и 101. Эти значения используются в за­просе. Затем значения переменных v_Department и v_Course изменяются, но это никак не влияет на активный набор запроса. Чтобы применялись но­вые значения, курсор необходимо закрыть и открыть заново. В соответст­вии с транзакционной моделью (см. главу 4) запрос видит изменения, внесенные в базу данных до выполнения оператора OPEN, и изменения сделанные в базе данных текущей транзакцией. Если другой сеанс изменил данные, но еще не зафиксировал эти изменения, они видны не будут.
Активный набор, т.е. набор строк, удовлетворяющих условию запроса, определяется во время открытия курсора. К примеру, в предыдущем запро­се возвращается одна строка ("Building Seven'). Для таблицы (таблиц), ука­занной в конструкции FROM запроса, проверяется условие WHERE, и все строки, для которых условие истинно, добавляются к активному набору. Указатель на этот набор также создается во время открытия курсора. Он сообщает, какая строка должна быть считана курсором в следующий раз.
Открытый курсор нельзя открыть еще раз. Если команда OPEN приме­няется к уже открытому курсору, Oracle генерирует ошибку ORA-6511, например:

 









jAntivirus