DeepEdit!

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

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

Пример использования курсорных переменных

Ниже приводится полная программа        демонстрирующая использование курсорных переменных. В ней имеется встроенный блок 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 и выше.
 









jAntivirus