пятница, 30 августа 2013 г.

Курсоры в PL/SQL

Уже конец месяца, а я про pl/sql ни слова не опубликовал, надо менять ситуацию. Сегодня начну рассказ про курсоры в pl/sql. Я хотел начать этот рассказ еще вчера, но вчера было день рождение у Skype, поэтому я решил обязательно об этом рассказать, что и сделал.

Курсоры используются при выборке данных из запроса в pl/sql-коде. Результат выполнения SQL-запроса попадает в приватную рабочу область (то есть — туда, где находятся результирующие строки запроса). Есть несколько различных способов получить доступ к этой памяти. Одним из главных способов и является использование курсоров (и связанных с ним объектов).

Связанные с курсорами объекты (такие, как курсорные переменные и курсорные выражения) я сегодня рассматривать не буду, когда-нибудь в другой раз руки дойдут. Но познакомлю вас (да и сам подробнее разберусь) с явными и неявными курсорами.

Сегодня будет только теоретическая статья, я в ней расскажу про существование явных и неявных курсоров. А в следующие разы — уже более подробно, с практическими примерами (их же нужно еще подготовить, а я пока этого не сделал).

Неявный курсор: яркий представитель — select … into (в pl/sql-процедурах), остальные инструкции DML (при использовании их в коде pl/sql) так же являются неявными курсорами. Неявными потому, что при (например) выборке данных Oracle автоматом выполняет все необходимые с этим курсором действия (открытие, выборка данных и закрытие курсора).
Достоинства: ничего не нужно делать самому, работает быстро.
Недостатки: повторяемость кода.

Явный курсор: объявлять такие курсоры необходимо явно (в блоке объявления переменных). Все действия с такими курсорами нужно прописывать самому — открытие, выборку данных и закрытие курсора.
Достоинства: один и тот же курсор можно использовать в разных местах pl/sql программы.
Недостатки: надо писать дополнительный код.

Просто говоря, курсоры — это средство, с помощью которого можно получить данные в pl/sql из select-запроса. В зависимости от того, как вы получили эти данные и отличаются друг от друга явные и неявные курсоры. В одной из следующих статей я рассмотрю сравнение по быстродействию явных и неявных курсоров.

Комментариев нет:

Отправить комментарий