Студопедия

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

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

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






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Пример 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 :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.