DeepEdit!

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

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

Выделение памяти на клиентской стороне

В типичном случае курсорная переменная открывается на сервере и за­тем передается клиентской программе с помощью переменной привязки. В обязанности клиентской программы входит выделение памяти для пе­ременной. В зависимости от языка, на котором написана программа кли­ентской стороны, курсорная переменная размещается по-разному. В этом разделе приводятся примеры размещения для клиента Рго*С. Курсорные переменные могут использоваться также в клиентских программах OCI и JDBC. Дополнительная информация о применении курсорных перемен­ных в этих средах содержится в документации Oracle.
Выделение памяти в Рго*С Чтобы выделить память при использовании прекомпилятора Рго*С, необходимо объявить переменную типа SQL_CURSOR. Затем она размещается с помощью команды EXEC SQL ALLOCATE. Например, следующий фрагмент Рго*С объявляет и разме­щает курсорную переменную:
Базовая курсорная переменная является неограниченной, так как не имеет связанного возвращаемого типа.
Выделение памяти на серверной стороне
Курсорные переменные могут также полностью использоваться на серве­ре в рамках PL/SQL. В этом случае переменная автоматически размеща­ется по мере необходимости, так же как и другие типы данных. Когда переменная выходит из области действия и больше не использует память, память освобождается. Курсорные переменные нельзя объявлять в модулях.
Открытие курсорной переменной для запроса
Для связи курсорной переменной с определенным оператором SELECT используется расширенный синтаксис оператора OPEN, позволяющий указать требуемый запрос:
OPEN        FOR
где        — это ранее объявленная курсорная переменная,
,а onepamop_select— требуемый запрос. Если курсорная переменная ограни­чена, список выбора должен соответствовать типу, возвращаемому курсо­ром. Иначе выдается сообщение об ошибке:
то будет        сообщение об ошибке        так как список выбо-
ра запроса не соответствует типу, возвращаемому этой курсорной переменной.
Оператор OPEN...FOR, в принципе, аналогичен оператору OPEN: ана­лизируются переменные привязки и определяется активный набор. После выполнения OPEN...FOR можно считывать информацию из курсорной переменной. Считывание может производиться либо на сервере с помощью оператора FETCH (также, как для обычного курсора), либо на клиенте.
Внимание
Запрос, используемый в OPEN FOR, должен быть жестко закодирован в программе — он не может содержаться в переменной. Это ограничение снимается в Oracle8 посредством встроенного динамического SQL (см. главу 12.)

Закрытие курсорных переменных
На сервере курсорные переменные закрываются точно так же, как стати­ческие курсоры, — при помощи оператора CLOSE. При этом освобожда­ются ресурсы, используемые запросом, однако память, отведенная для
хранения самой курсорной переменной, освобождается не всегда, а толь­ко когда переменная выходит из области своего действия. Запрещается повторно закрывать ранее закрытые курсоры и курсорные переменные.
На клиенте курсорные переменные закрываются, как и остальные кур­соры, с помощью любого подходящего механизма.
 









jAntivirus