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

После объявления и инициализации курсорной переменной  в среде PL/SQL  типа программы Pro*C, курсорная переменная передается  PL/SQL. Затем, она открывается оператором OPEN для многострочного запроса на сервере, выбирается клиентом оператором FETCHи закрывается на другой стороне. В следующем примере курсорная переменная передаётся пакетной процедуре, которая открывает курсорную переменную emp_cv для выбранного запроса:

 

PROCEDURE open_emp_cv (emp_cv IN OUT EmpCurTyp, choice IN CHAR) IS

 

BEGIN

   IF choice = 'C' THEN

      OPEN emp_cv FOR SELECT * FROM emp WHERE comm IS NOT NULL;

   ELSIF choice = 'S' THEN

      OPEN emp_cv FOR SELECT * FROM emp WHERE sal > 2500;

   ELSIF choice = 'J' THEN

      OPEN emp_cv FOR SELECT * FROM emp WHERE job = 'MANAGER';

   END IF;

END open_emp_cv;

Оператор OPEN-FOR

Утверждение OPEN-FOR выполняет многострочный запрос соответствующий курсорной переменной. Он также выделяет ресурсы, используемые Oracle для обработки запроса и определяет активное множество, которое состоит из строк, удовлетворяющих критерию поиска запроса. Курсорная переменная устанавливается до первой строки в активном множестве.

 

Синтаксис:

 

cursor_variable

имя переменной типа CURSOR

select_statement

запрос, связанный с cursor_variable, который возвращает набор значений.

 

Нужно открыть курсорную переменную на сервере. Это делается путём передачи связанной переменной анонимному блоку PL/SQL. Затем блок посылается Oracle Server для выполнения. Другие утверждения OPEN-FOR могут открыть ту же  курсорную переменную для других запросов. Не нужно закрывать курсорную переменную для её повторного открытия.

Можно передавать  курсорную переменную в PL/SQL,  вызывая хранимую процедуру, которая объявляет  курсорную переменную как один из формальных параметров. В настоящее время, однако, удаленные подпрограммы не могут возвращать значения  курсорных переменных. Следовательно, нельзя использовать удаленную процедуру, чтобы открыть  курсорную переменную.