Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример 13.5. Разработать курсор для вывода списка фирм и клиентов из Москвы.






DECLARE @firm VARCHAR(50),

@fam VARCHAR(50),

@message VARCHAR(80)

PRINT ' Список клиентов'

DECLARE klient_cursor CURSOR LOCAL FOR

SELECT Фирма, Фамилия

FROM Клиент

WHERE Город='Москва'

ORDER BY Фирма, Фамилия

 

OPEN klient_cursor

FETCH NEXT FROM klient_cursor INTO @firm, @fam

WHILE @@FETCH_STATUS=0

BEGIN

SELECT @message='Клиент '+@fam+

' Фирма '+ @firm

PRINT @message

 

-- переход к следующему клиенту--

 

FETCH NEXT FROM klient_cursor

INTO @firm, @fam

END

CLOSE klient_cursor

DEALLOCATE klient_cursor

Пример 13.6. Разработать курсор для вывода списка приобретенных клиентами из Москвы товаров и их общей стоимости. В один курсор заносятся все московские клиенты, затем для каждой строки курсора, т.е. для каждого клиента, определяется и распечатывается другой курсор – его покупки. Подсчитывается общая стоимость покупок клиента.

DECLARE @id_kl INT,

@firm VARCHAR(50),

@fam VARCHAR(50),

@message VARCHAR(80),

@nam VARCHAR(50),

@d DATETIME,

@p INT,

@s INT

SET @s=0

PRINT ' Список покупок'

DECLARE klient_cursor CURSOR LOCAL FOR

SELECT КодКлиента, Фирма, Фамилия

FROM Клиент

WHERE Город='Москва'

ORDER BY Фирма, Фамилия

 

 

OPEN klient_cursor

FETCH NEXT FROM klient_cursor

INTO @id_kl, @firm, @fam

WHILE @@FETCH_STATUS=0

BEGIN

SELECT @message='Клиент '+@fam+

' Фирма '+ @firm

PRINT @message

SELECT @message='Наименование товара Дата

покупки Стоимость'

PRINT @message

DECLARE tovar_cursor CURSOR FOR

SELECT Товар.Название, Сделка.Дата,

Товар.Цена*Сделка.Количество AS

Стоимость

FROM Товар INNER JOIN Сделка ON Товар.

КодТовара=Сделка.КодТовара

WHERE Сделка.КодКлиента=@id_kl

 

OPEN tovar_cursor

FETCH NEXT FROM tovar_cursor

INTO @nam, @d, @p

IF @@FETCH_STATUS< > 0

PRINT ' Нет покупок'

WHILE @@FETCH_STATUS=0

BEGIN

SELECT @message=' '+@nam+' '+

CAST(@d AS CHAR(12))+' '+

CAST(@p AS CHAR(6))

PRINT @message

SET @s=@s+@p

FETCH NEXT FROM tovar_cursor

INTO @nam, @d, @p

END

CLOSE tovar_cursor

DEALLOCATE tovar_cursor

 

SELECT @message='Общая стоимость '+

CAST(@s AS CHAR(6))

PRINT @message

 

-- переход к следующему клиенту--

 

FETCH NEXT FROM klient_cursor

INTO @id_kl, @firm, @fam

END

CLOSE klient_cursor

DEALLOCATE klient_cursor

Пример 13.7. Разработать прокручиваемый курсор для клиентов из Москвы. Если номер телефона начинается на 1, удалить клиента с таким номером и в первой записи курсора заменить первую цифру в номере телефона на 4.

DECLARE @firm VARCHAR(50),

@fam VARCHAR(50),

@tel VARCHAR(8),

@message VARCHAR(80)

PRINT ' Список клиентов'

DECLARE klient_cursor CURSOR GLOBAL SCROLL

KEYSET FOR

SELECT Фирма, Фамилия, Телефон

FROM Клиент

WHERE Город='Москва'

ORDER BY Фирма, Фамилия

FOR UPDATE

OPEN klient_cursor

FETCH NEXT FROM klient_cursor

INTO @firm, @fam, @tel

WHILE @@FETCH_STATUS=0

BEGIN

SELECT @message='Клиент '+@fam+

' Фирма '+@firm ' Телефон '+ @tel

PRINT @message

 

-- если номер телефона начинается на 1,

-- удалить клиента с таким номером

IF @tel LIKE ‘1%’

DELETE Клиент

WHERE CURRENT OF klient_cursor

ELSE

 

-- переход к следующему клиенту

 

FETCH NEXT FROM klient_cursor

INTO @firm, @fam, @tel

END

 

FETCH ABSOLUTE 1 FROM klient_cursor

INTO @firm, @fam, @tel

 

-- в первой записи заменить первую цифру в

-- номере телефона на 4

 

UPDATE Клиент SET Телефон=’4’ +

RIGHT(@tel, LEN(@tel)-1))

WHERE CURRENT OF klient_cursor

SELECT @message='Клиент '+@fam+' Фирма '+

@firm ' Телефон '+ @tel

PRINT @message

CLOSE klient_cursor

DEALLOCATE klient_cursor

Пример 13.8. Использование курсора как выходного параметра процедуры. Процедура возвращает набор данных – список товаров.

CREATE PROC my_proc

@cur CURSOR VARYING OUTPUT

AS

SET @cur=CURSOR FORWARD_ONLY STATIC FOR

SELECT Название FROM Товар

OPEN @cur

Вызов процедуры и вывод на печать данных из выходного курсора осуществляется следующим образом:

DECLARE @my_cur CURSOR

DECLARE @n VARCHAR(20)

EXEC my_proc @cur=@my_cur OUTPUT

FETCH NEXT FROM @my_cur INTO @n

SELECT @n

WHILE (@@FETCH_STATUS=0)

BEGIN

FETCH NEXT FROM @my_cur INTO @n

SELECT @n

END

CLOSE @my_cur

DEALLOCATE @my_cur

 


СУБД для специальности СП, III курс






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.