Ниже приводится полная программа демонстрирующая использование курсорных переменных. В ней имеется встроенный блок PL/SQL, предназначенный для выбора данных либо из таблицы classes, либо из таблицы rooms, в зависимости от ввода пользователя. Текст программы сопровождается подробными комментариями.
В этой программе курсор открывается на сервере (посредством встроенного анонимного блока), а считывается и закрывается на станции клиента. Курсорная переменная объявлена как базовая, поэтому она не ограничена. Таким образом, одна и та же переменная используется для выбора информации как из таблицы classes, так и из таблицы rooms.
Второй пример курсорной переменной
Следующий пример похож на предыдущий, однако он написан целиком на PL/SQL. Это хранимая процедура, с помощью которой выбирается информация из таблицы classes или из таблицы rooms в зависимости от входных данных. Более подробно о хранимых процедурах говорится в главах 9 и 10.
Ограничения на использование курсорных переменных
Курсорные переменные являются довольно мощным средством, и их применение намного упрощает обработку информации, поскольку они позволяют возвращать в одной переменной данные самых различных типов. Однако на их использование налагается ряд ограничений:
Курсорные переменные нельзя объявлять в модуле. Сам тип можно, но переменную нельзя.
Удаленные подпрограммы не могут возвращать значение курсорной переменной. Курсорные переменные могут передаваться между клиентской и серверной стороной PL/SQL (например, из клиента Oracle Form), но не между двумя серверами.
Сборные конструкции PL/SQL (индексные таблицы, вложенные таблицы и изменяемые массивы) не могут хранить курсорные переменные. Аналогично, таблицы и представления базы данных не могут хранить столбцы REF CURSOR. Можно, однако, иметь массив клиентских курсорных переменных (такой, KaicJDBC ResultSets).
Нельзя использовать курсорные переменные с динамическим SQL в Рго*С.
Запрос, связанный с курсорной переменной в операторе OPEN...FOR, не может быть FOR UPDATE. Это ограничение снято в Огас1е8 и выше.
< Предыдущая | Следующая > |
---|