Во всех приведенных выше примерах явных курсоров рассматривались статические курсоры (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.
< Предыдущая | Следующая > |
---|