Лекции / Л-5 - Процедурные расширения SQL
.pdfИзменение записей с помощью курсора
Для выполнения изменений с помощью курсора необходимо выполнить команду UPDATE в следующем формате:
UPDATE имя_таблицы SET { имя_столбца = { DEFAULT | NULL | выражение } } [, ... n]
WHERE CURRENT OF { { [ GLOBAL ] имя_курсора } | @имя_переменной курсора }
За одну операцию могут быть изменены несколько столбцов текущей строки курсора, но все они должны принадлежать одной таблице.
Удаление записей с помощью курсора
Для удаления данных посредством курсора используется команда DELETE в следующем формате:
DELETE имя_таблицы
WHERE CURRENT OF { { [GLOBAL] имя_курсора } | @имя_переменной курсора }
В результате будет удалена строка, установленная текущей в курсоре.
Пример использования курсора для модификации данных
Разработать прокручиваемый курсор для клиентов.
Если фамилия клиента начинается на букву К, удалить клиента с такой фамилией.
В первой записи курсора заменить первую цифру в номере телефона на 1.
Использование курсора для модификации данных
Использование курсора для модификации данных
Замечания к использованию курсоров
Для выполнения операций с выбранными строками лучше обойтись обычными операторами SQL. Используйте для обработки базовый язык только, если обычный SQL не позволяет выполнить необходимые операции.
Причины:
курсоры не позволяют проводить операции изменения над всем объемом данных;
скорость выполнения операций обработки данных посредством курсора заметно ниже, чем у стандартных средств SQL.
Текст запроса (1)
-- определить табличную переменную
DECLARE @t1 TABLE
( id INT IDENTITY (1,1) NOT NULL, avg_sum MONEY DEFAULT 0.00,
date DATETIME DEFAULT '1.1.1980' NULL PRIMARY KEY (id) )
Текст запроса (2)
-- заполнить временную таблицу
INSERT INTO @t1 (avg_sum, date) VALUES (234.56, '12.24.2006') ;
INSERT INTO @t1 (avg_sum, date) VALUES (13434.06, '2.28.2006' ) ;
INSERT INTO @t1 (avg_sum, date) VALUES (897.64, '1. 4 . 2006') ;
INSERT INTO @t1 (avg_sum, date) VALUES (4532.12, '12.29.2006') ;
-- вывести содержимое временной таблицы
SELECT * FROM @t1 ;
Основные типы курсоров в T-SQL
Динамические курсоры – изменения данных отображаются при перемещении курсора. Используют минимальное количество ресурсов сервера за пределами БД.
Статические курсоры – изолированы от изменений данных. Сервер сохраняет весь итоговый набор курсора при первой выборке.
Ключевые курсоры – отображают большую часть изменяемых данных (новые записи не появляются). При открытии курсора сервер запоминает ключи возвращаемых записей. Новые записи не включаются в курсор, а при обращении к записи, удаленной другим пользователем, происходит ошибка.
Текст запроса (1)
-- определяем переменные
DECLARE @name nvarchar(20), @surname nvarchar(20), @message nvarchar(50)
PRINT ' Список клиентов'
-- объявляем курсор
DECLARE cur CURSOR LOCAL FOR
SELECT u_name, u_surname
FROM dbo.Users
WHERE u_status='active'