Курсоры (ядро СУБД)
Операции в реляционной базе данных выполняются над множеством строк. Набор строк, возвращаемый инструкцией SELECT, содержит все строки, которые удовлетворяют условиям, указанным в предложении WHERE инструкции. Такой полный набор строк, возвращаемых инструкцией, называется результирующим набором. Приложения, особенно интерактивные, не всегда эффективно работают с результирующим набором как с единым целым. Им нужен механизм, позволяющий обрабатывать одну строку или небольшое их число за один раз. Курсоры являются расширением результирующих наборов, которые предоставляют такой механизм.
Курсоры позволяют усовершенствовать обработку результатов:
- позиционируясь на отдельные строки результирующего набора;
- получая одну или несколько строк от текущей позиции в результирующем наборе;
- поддерживая изменение данных в строках в текущей позиции результирующего набора;
- поддерживая разные уровни видимости изменений, сделанных другими пользователями для данных, представленных в результирующем наборе;
- предоставляя инструкциям Transact-SQL в сценариях, хранимых процедурах и триггерах доступ к данным результирующего набора.
Запрос курсора
Microsoft SQL Server 2005 поддерживает два метода запроса курсоров.
- Transact-SQL.
Язык Transact-SQL поддерживает синтаксис использования курсоров по стандарту SQL-92. - API-функции курсоров базы данных.
SQL Server поддерживает функциональность курсоров для следующих API-интерфейсов баз данных:- ADO (Microsoft ActiveX Data Object);
- OLE DB;
- открытый интерфейс доступа к базам данных (ODBC).
Оба этих способа никогда не должны использоваться в приложении одновременно. Приложение, применяющее API-интерфейс для определения режима работы курсоров, не может затем выполнить инструкцию Transact-SQL DECLARE CURSOR для запроса нового курсора Transact-SQL. Инструкция DECLARE CURSOR может использоваться только в том случае, если все атрибуты API-курсоров будут установлены в значения по умолчанию.
Если не был запрошен ни Transact-SQL, ни API-курсор, SQL Server целиком возвращает по умолчанию результирующий набор приложению (это называется результирующим набором по умолчанию).
Обработка курсоров
Курсоры Transact-SQL и API-курсоры имеют различный синтаксис, но для всех курсоров SQL Server используется одинаковый цикл обработки.
- Связать курсор с результирующим набором инструкции Transact-SQL и задать его характеристики (например, возможность обновления строк).
- Выполнить инструкцию Transact-SQL для заполнения курсора.
- Получить в курсор необходимые строки. Операция получения в курсор одной и более строк называется выборкой. Выполнение серии выборок для получения строк в прямом или обратном направлении называется прокруткой.
- При необходимости выполнить операции изменения (обновления или удаления) строки в текущей позиции курсора.
- Закрыть курсор.
См. также
Основные понятия
Типы курсора (компонент Database Engine)
О выборе типа курсора