Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Закрытие курсора необязательно освобождает ассоциированную с ним память. В некоторых реализациях нужно явным образом освободить ее с помощью оператора DEALLOCATE. После освобождения курсора освобождается и память, при этом становится возможным повторное использование имени курсора.
DEALLOCATE { имя_курсора | @имя_переменной_курсора }
Для контроля достижения конца курсора рекомендуется применять функцию: @@FETCH_STATUS
Функция @@FETCH_STATUS возвращает:
0, если выборка завершилась успешно;
-1, если выборка завершилась неудачно вследствие попытки выборки строки, находящейся за пределами курсора;
-2, если выборка завершилась неудачно вследствие попытки обращения к удаленной или измененной строке.
Пример объявления и открытия курсора:
--объявление курсора
DECLARE My_Curcor CURSOR SCROLL FOR SELECT * FROM R1
-- использование переменной для объявления курсора
DECLARE @MyCursor CURSOR
SET @MyCursor=CURSOR LOCAL SCROLL FOR
SELECT * FROM Клиент
-- открытие курсора
OPEN My_Curcor
Пример использования курсора для вывода номеров счетов с балансом выше среднего.
DECLARE @nomer varchar(50),
@balans money,
@avg_balans money,
@message varchar(250)
SELECT @avg_balans = avg(Баланс) FROM R1
PRINT ' Список счетов'
DECLARE klient_cursor CURSOR LOCAL FOR
SELECT * FROM R1 WHERE Баланс > @avg_balans ORDER BY Баланс
OPEN klient_cursor
FETCH NEXT FROM klient_cursor INTO @nomer, @balans
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @message='Счет'+@nomer +'Баланс '+CAST(@balans as varchar)
PRINT @message
-- переход к следующему клиенту
FETCH NEXT FROM klient_cursor INTO @nomer, @balans
END
CLOSE klient_cursor
DEALLOCATE klient_cursor
Дата публикования: 2015-09-17; Прочитано: 208 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!