Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / Л-5 - Процедурные расширения SQL

.pdf
Скачиваний:
13
Добавлен:
28.06.2021
Размер:
592.42 Кб
Скачать

Изменение записей с помощью курсора

Для выполнения изменений с помощью курсора необходимо выполнить команду 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'