
Лекции / Л-5 - Процедурные расширения SQL
.pdf
Текст запроса (2)
-- открываем курсор
OPEN cur
-- переход на начало курсора
FETCH NEXT FROM cur INTO @name, @surname -- двигаемся по курсору и печатаем строки
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @ message = @name+' '+@surname
PRINT @message

Текст запроса (3)
-- переход к следующему клиенту
FETCH NEXT FROM cur INTO @name, @surname
END
-- закрыть курсор
CLOSE cur
-- удалить курсор
DEALLOCATE cur

Текст запроса (1)
-- определяем переменные
DECLARE @name nvarchar(20), @surname nvarchar(20)
-- табличная переменная
DECLARE @t1 TABLE (name1 nvarchar (20), surname1 nvarchar(20))
-- объявляем курсор
DECLARE cur CURSOR LOCAL FOR
SELECT u_name, u_surname
FROM dbo.Users
WHERE u_status = 'active'

Текст запроса (2)
--открываем курсор
OPEN cur
--переход на начало курсора
FETCH NEXT FROM cur INTO @name, @surname
--двигаемся по курсору и заносим строки в табличную
--переменную
WHILE @@FETCH_STATUS = 0 BEGIN
INSERT INTO @t1 (name1,surname1) VALUES (@name, @surname)
FETCH NEXT FROM cur INTO @name, @surname
END

Текст запроса (3)
--закрыть курсор
CLOSE cur
--удалить курсор
DEALLOCATE cur
--вывести результат в приложение
SELECT * FROM @t1

Текст запроса (1)
-- определяем переменные
DECLARE @id INT,
@name NVARCHAR(20), @surname NVARCHAR(20), @phone NVARCHAR(12)
DECLARE klient_cursor CURSOR GLOBAL SCROLL KEYSET FOR
SELECT user_ID, u_name, u_surname, u_phone FROM dbo.Users
FOR UPDATE

Текст запроса (2)
OPEN klient_cursor
FETCH NEXT FROM klient_cursor INTO @id, @name, @surname, @phone
WHILE @@FETCH_STATUS = 0 BEGIN
--если фамилия клиента начинается на К,
--удалить клиента с такой фамилией
IF @surname LIKE 'К%'
DELETE dbo.Users
WHERE CURRENT OF klient_cursor

Текст запроса (3)
-- переход к следующему клиенту
FETCH NEXT FROM klient_cursor
INTO @id, @name, @surname, @phone
END
--в первой записи заменить первую цифру в
--номере телефона на 1
FETCH ABSOLUTE 1 FROM klient_cursor INTO @id, @name, @surname, @phone UPDATE dbo.Users
SET u_phone = '1'+RIGHT(@phone, LEN(@phone)-1)

Текст запроса (4)
WHERE CURRENT OF klient_cursor
CLOSE klient_cursor
DEALLOCATE klient_cursor
-- просмотр результата
SELECT * FROM dbo.Users