Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Операторы для работы с курсором




Прежде чем обратиться к данным курсора, его нужно после объявления открыть.

Синтаксис оператора OPEN в обозначениях MS SQL Server:

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

GLOBAL -указывает, что область курсора является глобальной по отношению к соединению.

Пример:

DECLARE MyCursor1 CURSOR FOR (select * from Authors)

OPEN MyCursor1

 

После прекращения работы с курсором, его нужно закрыть. Курсор остается доступным для последующего использования в рамках процедуры или триггера, в котором он создан.

Синтаксис оператора CLOSE в обозначениях MS SQL Server:

CLOSE { { [ GLOBAL ] cursor_name } | cursor_variable_name }

 

Пример:

DECLARE MyCursor1 CURSOR FOR (select * from Authors)

OPEN MyCursor1

--здесь операторы работы с курсором

CLOSE MyCursor1

 

Если курсором больше не будут пользоваться, то его необходимо уничтожить и освободить переменную.

Синтаксис оператора DEALLOCATE в обозначениях MS SQL Server:

DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }

 

Пример:

DECLARE MyCursor1 CURSOR FOR (select * from Authors)

OPEN MyCursor1

--здесь операторы работы с курсором

CLOSE MyCursor1

DEALLOCATE MyCursor1

 

Работа с курсором:

FETCH – оператор движения по записям курсора и извлечения данных текущей записи в указанные переменные.

Синтаксис оператора FETCH в обозначениях MS SQL Server:

FETCH

[ [ NEXT | PRIOR | FIRST | LAST

| ABSOLUTE { n | @ nvar }

| RELATIVE { n | @ nvar } ]

FROM

]

{ { [ GLOBAL ] cursor_name } | @ cursor_variable_name }

[ INTO @ variable_name [,... n ] ]

NEXT - Возвращает строку результата сразу же за текущей строкой и перемещает указатель текущей строки на возвращенную строку. Если инструкция FETCH NEXT выполняет первую выборку в отношении курсора, она возвращает первую строку в результирующем наборе. NEXT является параметром по умолчанию выборки из курсора.

PRIOR - Возвращает строку результата, находящуюся непосредственно перед текущей строкой и перемещает указатель текущей строки на возвращенную строку. Если инструкция FETCH PRIOR выполняет первую выборку из курсора, не возвращается никакая строка и положение курсора остается перед первой строкой.

FIRST - Возвращает первую строку в курсоре и делает ее текущей.

LAST - Возвращает последнюю строку в курсоре, и делает ее текущей.

ABSOLUTE { n | @ nvar } - Если n или @nvar имеют положительное значение, возвращает строку, стоящую дальше на n строк от передней границы курсора, и делает возвращенную строку новой текущей строкой. Если n или @nvar имеют отрицательное значение, возвращает строку, отстоящую на n строк от задней границы курсора, и делает возвращенную строку новой текущей строкой. Если n или @nvar равны 0, не возвращается никакая строка. n должно быть целым числом, а @nvar должна иметь тип данных smallint, tinyint или int.

 

RELATIVE { n | @ nvar } - Если n или @nvar имеют положительное значение, возвращает строку, отстоящую на n строк вперед от текущей строки, и делает возвращенную строку новой текущей строкой. Если n или @nvar имеют отрицательное значение, возвращает строку, отстоящую на n строк назад от текущей строки, и делает возвращенную строку новой текущей строкой. Если n или @nvar равны 0, возвращает текущую строку. Если при первой выборке из курсора инструкция FETCH RELATIVE указывается с отрицательными или равными нулю параметрами n или @nvar, то никакая строка не возвращается. n должно быть целым числом, а @nvar должна иметь тип данных smallint, tinyint или int.

GLOBAL - Указывает, что параметр cursor_name ссылается на глобальный курсор.

cursor_name - Имя открытого курсора, из которого должна быть произведена выборка. Если под именем cursor_name существуют как глобальный, так и локальный курсоры, cursor_name устанавливается в качестве глобального курсора, если указывается GLOBAL, и в качестве локального курсора, если GLOBAL не задано.

@cursor_variable_name - Имя переменной курсора, ссылающейся на открытый курсор, из которого должна быть произведена выборка.

INTO @variable_name [, ...n ] - Позволяет поместить данные из столбцов выборки в локальные переменные. Каждая переменная из списка, слева направо, связывается с соответствующим столбцом в результирующем наборе курсора.

Тип данных каждой переменной должен соответствовать типу данных соответствующего столбца результирующего набора, или должна обеспечиваться поддержка неявного преобразования в тип данных этого столбца. Количество переменных должно совпадать с количеством столбцов в списке выбора курсора.

Разрешения на инструкцию FETCH по умолчанию предоставляются всем допустимым пользователям.

Для контроля достижения конца курсора рекомендуется применять функцию @@FETCH_STATUS. Функция @@FETCH_STATUS возвращает состояние последней инструкции FETCH.

Функция @@FETCH_STATUS возвращает:

0, если выборка завершилась успешно;

-1, если выборка завершилась неудачно вследствие попытки выборки строки, находящейся за пределами курсора;

-2, если выборка завершилась неудачно вследствие попытки обращения к удаленной или измененной строке.

 

Пример: Курсор является динамическим, двигаться по нему можно в любом направлении.

DECLARE MyCursor1 SCROLL CURSOR FOR (select * from Authors)

DECLARE @i bigint, @s char(20), @d datetime

OPEN MyCursor1

FETCH FIRST FROM MyCursor1

INTO @i, @s, @d

PRINT @i

PRINT @s

PRINT @d

WHILE @@FETCH_STATUS = 0

BEGIN

FETCH NEXT FROM MyCursor1

INTO @i, @s, @d

PRINT @i

PRINT @s

PRINT @d

END

CLOSE MyCursor1

DEALLOCATE MyCursor1

Результат:

Толстой Л.Н.

Jun 5 1825 12:00AM

Куприн А.И.

Aug 26 1870 12:00AM

Пушкин А.С.

Jun 7 1799 12:00AM

Булгаков М.А.

May 3 1899 12:00AM

Олеша Ю.К.

Feb 19 1899 12:00AM

Катаев В.П.

Jan 16 1897 12:00AM

Иванов И.И.

Jan 16 1897 12:00AM

Иванов И.И.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...