Опубликован: 02.02.2007 | Доступ: свободный | Студентов: 2376 / 244 | Оценка: 4.10 / 3.86 | Длительность: 26:44:00
Урок 26:

Курсоры в Transact-SQL

Мониторинг курсоров Transact-SQL

Transact-SQL предоставляет две глобальные переменные и функцию, которые помогают вам контролировать работу и состояние вашего курсора. Переменная @@CURSOR_ROWS возвращает количество строк во множестве последнего курсора, открытого в соединении. Значения, возвращаемые @@CURSOR_ROWS, представлены в таблице 27.1.

Таблица 27.1. Значения, возвращаемые переменной @@CURSOR_ROWS.
Возвращаемое значение Описание
-m Курсор заполнен записями не полностью; множество курсора на данный момент содержит m строк.
-1 Курсор является динамическим, и количество строк может варьироваться.
0 Курсор либо не открыт, а последний открытый курсор был закрыт и освобожден, либо курсор содержит нуль строк.
n Количество строк в курсоре равно n.

Переменная @@FETCH_STATUS возвращает информацию о выполнении последней команды FETCH. В таблице 27.2 представлены значения, возвращаемые переменной @@FETCH_STATUS.

Таблица 27.2. Значения, возвращаемые переменной @@FETCH_STATUS.
Возвращаемое значение Описание
0 Оператор FETCH был выполнен успешно.
-1 Оператор FETCH был выполнен неудачно.
-2 Извлекаемая строка отсутствует.

Наконец, Transact-SQL предоставляет функцию CURSOR_STATUS. Эта функция имеет следующий синтаксис:

CURSOR_STATUS(тип, курсор_или_переменная)

Тип может иметь значения 'local', 'global' или 'variable', а курсор_или_переменная – это идентификатор курсора или курсорной переменной, информацию о котором требуется получить. Результаты, возвращаемые функцией CURSOR_STATUS, представлены в таблице 27.3.

Таблица 27.3. Значения, возвращаемые функцией CURSOR_STATUS.
Возвращаемое значение Описание
1 Если функция вызывалась для динамического курсора, множество курсора состоит из нуля, одной или нескольких строк. Если функция вызывалась для другого типа курсора, курсор состоит по меньшей мере из одной строки.
0 Множество курсора пусто.
-1 Курсор закрыт.
-2 Возвращается только для курсорной переменной. Либо курсор, назначенный указанной переменной, закрыт, либо переменной не назначен какой-либо курсор.
-3 Указанный курсор или курсорная переменная не существует.

Используйте функции мониторинга курсором

  1. Нажмите кнопку Load Script (Загрузить сценарий)в панели инструмента анализатора запросов Query Analyzer. Query Analyzer отобразит диалоговое окно Open Query File (Открытие файла запроса).

  2. Выделите сценарий StatusFunctions и нажмите кнопку Open (Открыть). Query Analyzer загрузит сценарий в окно Query (Запрос).

  3. Нажмите кнопку Execute Query (Выполнить запрос)в панели инструментов анализатора запросов Query Analyzer. Query Analyzer выполнит запрос. Будет отображено четыре панели сетки. Первая создается оператором SELECT @@CURSOR_ROWS, а вторая – оператором FETCH. Третья панель сетки является результатом выполнения оператора SELECT @@FETCH_STATUS, а четвертая – результатом выполнения оператора SELECT CURSOR_STATUS ('local', 'simpleCursor').

Краткое содержание

Чтобы ... Синтаксис оператора SQL
Создать курсор
DECLARE имя_курсора CURSOR      
[видимость]                  
[прокрутка]                                
[тип]                               
[блокировка]       
[TYPE_WARNING]                 
FOR оператор_выборки           
[FOR UPDATE [OF имена_столбцов]]
Открыть курсор OPEN [GLOBAL] курсор_или_переменная
Закрыть курсор CLOSE [GLOBAL] курсор_или_переменная
Освободить курсор DEALLOCATE [GLOBAL] курсор_или_переменная
Использовать простую команду FETCH FETCH курсор_или_переменная
Извлечь строку с записью ее в переменные FETCH курсор_или_переменная INTO список_переменных
Осуществить выборку строки по ее абсолютной позиции FETCH {FIRST | LAST | ABSOLUTE n) FROM курсор_или_переменная
Осуществить выборку строки по ее относительной позиции FETCH {NEXT | PRIOR | RELATIVE n) FROM курсор_или_переменная
Выполнить позиционное обновление UPDATE таблица_или_представление SET список_для_модификации WHERE CURRENT OF курсор_или_переменная
Выполнить позиционное удаление DELETE таблица_или_представление WHERE CURRENT OF курсор_или_переменная
Использовать функцию CURSOR_STATUS для запроса статуса курсора CURSOR_STATUS ('local', 'локальный_курсор') или CURSOR_STATUS ('global', 'глобальный_курсор') или CURSOR_STATUS ('variable', 'курсорная_переменная')
Инна Грушецкая
Инна Грушецкая
Сергей Чесноков
Сергей Чесноков