ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
FOR select_statement[FOR { READ ONLY | UPDATE [ OF column_list ] } ] cursor_name - имя курсора. INSENSITIVE – признак статического курсора. Изменения данных не разрешаются. Если ключевое слово INSENSITIVE не задано, по умолчанию создаётся динамический курсор. SCROLL – прокрутка. Если данный параметр опускается, то курсор будет последовательным, т.е. его просмотр возможен только в одном направлении – от начала к концу. select_statement – определяет тело запроса SELECT, с помощью которого задаётся набор строк курсора. FOR READ ONLY – курсор «только для чтения» FOR UPDATE [ OF column_list [,…n] ] – возможность изменения данных с помощью курсора в исходных таблицах. column_list [,…n] указывает список изменяемых столбцов. Например:DECLARE auth_curs CURSOR FOR SELECT * FROM authors или DECLARE myCursor CURSOR FOR SELECT OilName FROM Oils DECLARE @ myCursorVariable CURSOR SET @ myCursorVariable = myCursor Можно сначала объявить курсорную переменную, а затем использовать её для создания курсора, например: DECLARE @ myCursorVariable CURSOR SET @ myCursorVariable CURSOR LOCAL FAST_FORWARD FOR SELECT OilName FROM Oils
2. Открытие курсора. Объявление курсора создаёт объект курсора, но не создаёт набор записей. Для этого нужно открыть курсор. OPEN [GLOBAL] cursor_name | cursor_variable_name 3. Выборка из курсора (считывание данных). После открытия курсора из него можно считывать данные с помощью команды FETCH. SQL Server 2000 позволяет считывать из курсора всего одну строку. FETCH NEXT | PRIOR | FIRST | LAST – возвращается следующая, предыдущая, первая или последняя строка результирующего набора курсора. Эта строка становится текущей. ABSOLUTE – возвращает строку по её абсолютному порядковому номеру. RELATIVE – возвращает строку, находящуюся через n строк после текущей. { { [ GLOBAL ] cursor _name } | @ cursor _variable_name } – определяет имя курсора, из которого необходимо выбрать данные. INTO @variable_name [,...n ] – задаёт список переменных, в которых будут сохранены соответствующие значения полей возвращаемой строки. Например: DECLARE simpleCursor CURSOR LOCAL KEYSET FOR SELECT OilName FROM Oils DECLARE @theName char(20) OPEN simpleCursor -- Retrieve the first row into a variable FETCH FIRST FROM simpleCursor INTO @theName -- Retrieve the fifth row FETCH ABSOLUTE 5 FROM simpleCursor INTO @theName CLOSE simpleCursor DEALLOCATE simpleCursor
4. Закрытие курсора. Закончив использовать курсор, вы должны его закрыть. Оператор CLOSE освобождает ресурсы, выделенные под курсор. CLOSE [GLOBAL] cursor_name } | cursor_variable_name
5. Освобождение курсора. Оператор DEALLOCATE удаляет идентификатор или курсорную переменную, но не обязательно удаляет сам курсор. DEALLOCATE [GLOBAL] cursor_name } | cursor_variable_name
Рассмотрим примеры:
-- Создание курсора DECLARE myCursor CURSOR KEYSET READ ONLY FOR select* FROM Oils
-- Создание курсорной переменной DECLARE ©cursorVariable CURSOR
-- Создание множества записей курсора OPEN myCursor -- Назначение переменной курсору SET@cursorVariable = myCursor -- Освобождение курсора DEALLOCATE myCursor
Дополнительно обсудим некоторые еще не упоминавшиеся аргументы.
ВНИМАНИЕ В каждый момент времени можно создать два курсора (глобальный и локальный) с одинаковыми именами. Это связано с тем, что глобальный и локальный курсоры считаются сервером разными. Если используются курсоры с одинаковыми именами, то при обращении к ним следует явно указывать тип нужного курсора — глобальный или локальный. Если при создании курсора явно не указывается, какой он должен иметь тип, то он будет определяться значением параметра default to local cursor, устанавливаемом на уровне базы данных с помощью системной хранимой процедуры sp_dboption. Когда этот параметр установлен в ON, все создаваемые в контексте соответствующей базы данных курсоры будут локальными. По умолчанию этот параметр установлен в OFF, что означает создание глобальных курсоров. Для установки этого параметра в ON для базы данных pubs следует выполнить команду EXEC sp_dboption 'pubs', 'default to local cursor', 'on'.
Изменение исходных данных В предыдущем разделе была рассмотрена выборка данных из курсора. Однако, курсоры позволяют не только выбирать данные, но и изменять строки исходных таблиц. Идея использования курсора для изменения исходных данных состоит в том, что изменяется строка таблицы, соответствующая текущей строке курсора. Как и обычное изменение данных, изменение данных при помощи курсора выполняется командой UPDATE. Отличие состоит в том, что при работе с курсорами в разделе WHERE этой команды необходимо указать параметр CURRENT OF, после которого будет следовать имя курсора. При этом нельзя указывать никаких логических выражений. В результате при обновлении таблицы с помощью курсора гарантированно будет изменено не более одной строки (или вообще ни одной). При использовании же стандартного синтаксиса команды UPDATE за один этап возможно изменение множества строк. Отметим, что по умолчанию курсоры (как курсоры Transact-SQL, так и курсоры ANSI SQL-92) могут быть использованы для обновления. Причем поддерживается обновление всех столбцов исходных таблиц. Однако можно ограничить набор столбцов, которые будет разрешено изменять с помощью курсора. Для этого при объявлении курсора следует указать параметр FOR UPDATE OF и перечислить список столбцов исходной таблицы, которые нужно сделать доступными для обновления. При этом не требуется, чтобы перечисляемые столбцы использовались в запросе SELECT, на основе которого будет строиться курсор. Итак, пришло время рассмотреть синтаксис команды UPDATE, используемой при обновлении данных таблиц с помощью курсора: UPDATE { table name WITH (<table.hint_limited> [...n ]) View_name Не нашли, что искали? Воспользуйтесь поиском:
|