Доступные версии документации

Открытие курсора

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

Синтаксис

               
<курсор с претранслируемым запросом> ::=
OPEN <имя курсорной переменной> [AS "имя курсора"] FOR <запрос>
 [{,|USING} <параметр> [, …]];

<курсор с динамическим запросом>::=
OPEN <имя курсорной переменной> [AS "имя курсора"] FOR DIRECT
 <выражение символьного типа> [{,|USING} <параметр> [, …]];

<курсор с процедурой, возвращающей курсор>::=
OPEN <имя курсорной переменной> [AS "имя курсора"] FOR CALL
 <имя процедуры>(<список параметров>);

Описание

Курсор представляет собой выборку, содержащую набор значений определенной структуры (состоящую из полей). Значения полей доступны через курсорную переменную, а навигация по выборке осуществляется оператором FETCH.

Формат <запроса> рассмотрен в подразделе Выполнение запроса. Для открытия курсора допустим только SELECT-запрос.

Во втором случае предполагается вызов процедуры, возвращающей курсор. Синтаксис вызова такой же, как в операторе CALL, за исключением того, что здесь нельзя использовать фразу INTO.

Если указана фраза AS, открывается поименованный курсор. Курсор необходимо именовать в случае, когда будут подаваться запросы с условием WHERE CURRENT. Имя курсора заключается в кавычки и должно быть допустимо с точки зрения СУБД ЛИНТЕР.

После открытия курсора значения первой записи выборки уже доступны через курсорную переменную.

Если количество и/или типы полей курсора не соответствуют структуре курсорной переменной, то при выполнении OPEN происходит исключение BADCURSOR.

Примеры

  1. курсор с претранслируемым запросом

    create or replace procedure tst(in id int) result cursor( c char(20) )
    declare
      var b typeof(result);
    code
      open b for "select make from auto where personid=?;",id;
      return b;
    end;
  2. курсор с динамическим запросом

    create or replace procedure tst(in id int) result cursor( c char(20) )
    declare
      var b typeof(result);
    code
      open b for direct "select make from auto where personid=" + itoa(id) + ";";
      return b;
    end;
  3. курсор с процедурой, возвращающей курсор

    open b as "cursor_b" for call prc_retcur("auto");
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter