Теория для лабораторной работы №5 - "PL/SQL – курсоры и хранимые процедуры", страница 2

Можно использовать три команды для управления курсором: OPEN, FETCH и CLOSE. Сначала нужно инициализировать курсор оператором OPEN, который идентифицирует активное множество. Затем используется FETCH для получения первой строки. Можно выполнять FETCH, пока все строки не будут получены. После обработки последней строки, CLOSE закрывает курсор. Можно обрабатывать несколько запросов параллельно, объявив и открыв несколько курсоров.

Объявление курсора

Ссылки вперёд в PL/SQL недопустимы. Таким образом нужно объявить курсор до ссылки на него. Когда курсор объявляется, его нужно назвать и поставить в соответствие определённый запрос. В следующем примере объявляется курсор c1:  

 

DECLARE

   CURSOR c1 IS SELECT ename, deptno FROM emp WHERE sal > 2000;

 

Имя курсора - необъявлённый идентификатор, не являющийся именем переменной PL/SQL. Нельзя присваивать значения имени курсора или использовать его в выражениях. Однако, правила видимости для курсоров и переменных одинаковые. Называние курсоров также как и таблиц позволяется, но не рекомендуется.

Курсор может принимать параметры, которые появляются в соответствующем запросе также как и константы. Для объявления формальных параметров курсора, используется следующий синтаксис

 

CURSOR cursor_name [(parameter [, parameter, ...])] IS SELECT ...

 

где parameter имеет следующий синтаксис:

 

parameter_name [IN] datatype [{:= | DEFAULT} expr]

 

Формальные параметры курсора должны быть IN-параметры. Поэтому, они не могут возвращать значения фактическим параметрам.

Пример, приведённый ниже, показывает как нужно инициализировать параметры курсора в значения по умолчанию. Значит, курсору можно передавать разное количество фактических параметров, принимая или переназначая значения по умолчанию. Также, можно добавить формальные параметры без изменения каждой ссылки на курсор.

 

DECLARE

   CURSOR c1 (low  INTEGER DEFAULT 0,

              high INTEGER DEFAULT 99) IS SELECT ...

 

Область видимости параметров курсора локальна по отношению к курсору, означая, что на них можно ссылаться только в запросе, определённом в объявлении курсора. Значения параметров курсора используются запросом, когда  курсор открыт.