DeepEdit!

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

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

Курсорные переменные

Во всех приведенных выше примерах явных курсоров рассматривались статические курсоры (static cursors), связанные с одним SQL-оператором, который был известен при компиляции блока. Курсорная же переменная (cursor variable) может быть связана с различными операторами во время выполнения программы. Курсорные переменные аналогичны перемен­ным PL/SQL, в которых могут содержаться различные значения. Стати­ческие же курсоры аналогичны константам PL/SQL, так как они могут быть связаны только с одним запросом на этапе выполнения программы.
Внимание
Динамический SQL также позволяет связывать различные шт операторы с переменной (см. главу 12).
Чтобы воспользоваться курсорной переменной, ее необходимо предва­рительно объявить. Во время выполнения программы должна быть выделе­на память для хранения этой переменной, так как курсорные переменные имеют тип Затем ее можно открывать, считывать и закрывать так же, как статический курсор. Обычно курсорные переменные используются внутри хранимой процедуры, которая возвращает переменную клиентской программе. Эта техника позволяет хранимой процедуре открывать запрос и возвращать результирующий набор клиенту для обработки. Хранимые про­цедуры рассматриваются в главах 9 и 10.

Объявление курсорной переменной
Курсорные переменные имеют ссылочный тип. До Qracle8 это был единст­венный доступный ссылочный тип. (Огас1е8 и выше допускают REF объек­тных типов; см. главу 12.) Как говорилось в главе 3, ссылочный тип — это то же самое, что и указатель в языке программирования С. С помощью та­кого типа можно именовать области хранения данных во время выполне­ния программы. Чтобы воспользоваться ссылочным типом, необходимо сначала объявить переменную, а затем выделить область памяти. Ссылоч­ные типы PL/SQL объявляются следующим образом:
REF тип
где тип — это предварительно определенный тип. Ключевое слово REF означает, что новый тип будет указателем на ранее определенный тип. Таким образом, тип курсорной переменной — REF CURSOR. Полный син­таксис описания типа курсорной переменной таков:
TYPE uMiijmwnaIS REF CURSOR [RETURN возвращаемый_тип}\
где        — это имя нового ссылочного типа, а        
тип записи, указывающий типы списка выбора, которые в итоге будут возвращаться курсорной переменной.
Типом, возвращаемым курсорной переменной, должен быть тип записи. Запись может быть объявлена явно как определяемая пользователем или неявно. После определения ссылочного
типа можно объявить переменную. Ниже приводится пример объявле­ния различных курсорных переменных.
Ограниченные и неограниченные курсорные переменные
Курсорные переменные, рассмотренные в предыдущем разделе, являют­ся ограниченными (constrained): они объявляются только для конкретного возвращаемого типа. Переменная должна открываться для такого запро­са, список выбора которого соответствует типу, возвращаемому курсо­ром. В противном случае возникает предопределенная исключительная ситуация ROWTYPE_MISMATCH (несоответствие типов строк).
Однако в PL/SQL разрешается объявлять неограниченные (unconstrained) курсорные переменные, для которых предложение RETURN отсутствует. Такая переменная может быть открыта для любого запроса. Ниже приво­дится раздел объявлений, в котором описывается неограниченная кур­сорная переменная.
Выделение памяти под курсорные переменные
Курсорная переменная имеет ссылочный тип, поэтому при ее объявле­нии память не отводится. Перед началом работы с курсорной перемен­ной необходимо указать подходящую область памяти, которую можно создать двумя способами: выделить ее в клиентской программе или выде­лить ее на сервере с помощью системы поддержки PL/SQL.
 









jAntivirus