![]() Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример 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 Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammer
Каждая ссылка анализируется по трем пакетам оценки: SEO, Трафик и SMM.
SeoHammer делает продвижение сайта прозрачным и простым занятием.
Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта.
Что умеет делать SeoHammer
— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок. — Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта. — Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы). — SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание. SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение 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 курс
|