Операторы для работы с курсором
Прежде чем обратиться к данным курсора, его нужно после объявления открыть. Синтаксис оператора 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 Иванов И.И.
Читайте также: Cхема работы механизма репликации ДНК Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|