Similar presentations:
Базы данных. Лекция 10. Курсоры
1. Базы данных
БАЗЫ ДАННЫХЛекция 10 Курсоры
2. Курсоры
• Курсор – механизм, позволяющий обрабатыватьотдельные строки, полученные в результате selectзапроса.
3. Курсоры
• Курсор – область памяти сервера, предназначеннаядля хранения и обработки результата select-запроса.
4. Курсоры
1. Курсор объявляется в операторе DECLARE.2. Курсор открывается с помощью оператора OPEN.
3. С помощью оператора FETCH считывается одна или
несколько строк результирующего набора,
связанного с курсором SELECT-оператора, и
обрабатывается нужным образом. Результат каждого
считывания проверяется с помощью системной
функции @@FETCH_STATUS.
4. Курсор закрывается оператором CLOSE.
5. Если курсор глобальный, то он должен быть
освобожден с использованием оператора
DEALLOCATE.
5. Курсоры
6. Курсоры
7.
8.
9. Курсоры – пример
10. Курсоры
• Глобальные курсоры• Локальные курсоры
11. Курсоры
12. Курсоры
13. Курсоры
14. Курсоры
15. Типы курсоров
• Динамические• Статические
16. Курсоры
• Динамический курсор – изменения данныхотображаются в динамике
17. Курсоры
• Статический курсор – данные выбраны один раз ипроизошедшие изменения не видны
18. Курсоры
• Асинхронное заполнение статических курсоровоптимизирует производительность
• Статические курсоры используют рабочие таблицы
базы данных tempdb для хранения строк,
составляющих курсор
• Если в соответствии с прогнозом оптимизатора
запросов SQL Server ожидаемое число строк,
возвращаемых в курсоре, превысит значение
параметра sp_configure cursor threshold, сервер
запускает отдельный поток для заполнения рабочей
таблицы
19. Курсоры
• Функция @@CURSOR_ROWS сообщает число строк вкурсоре.
• @@CURSOR_ROWS для курсора, рабочая таблица
которого продолжает заполняться, возвращается
отрицательное число. Абсолютное значение
возвращенного числа дает число строк в рабочей
таблице, заполненных на данный момент времени.
• Например, если функция @@CURSOR_ROWS
выбрана, пока идет заполнение набора ключей или
курсора, управляемого набором ключей, но в наборе
ключей уже имеется 143 ключа, функция возвращает
значение -143.
20. Курсоры
• @@CURSOR_ROWS• -n – количество записей при асинхронной выборке,
• n – количество записей при синхронной выборке,
• 0 – курсор не открыт
21. Курсоры
22. Курсоры
23. Курсоры
24. Курсоры
• @@FETCH_STATUS – возвращает состояниепоследней инструкции FETCH, вызванной в любом
курсоре, открытом в данном соединении
25. Курсоры
• @@FETCH_STATUS• 0 – успешная выборка,
• -1 – вышли за диапазон таблицы,
• -2 – запись удалена после открытия курсора
26. Курсоры
27. Курсоры
28. Курсоры
• CURSOR_STATUS – cкалярная функция,позволяющая при вызове хранимой процедуры
определить, вернула ли она курсор и результирующий
набор для данного параметра
29. Курсоры
30. Курсоры – SCROLL
31. Курсоры
32.
33. Курсоры
34. Курсоры
35. Курсоры
36. Курсоры – UPDATE CURRENT OF
37. Курсоры – DELETE CURRENT OF
38. Вложенные курсоры
39.
40. Вложенные курсоры
41. Вложенные курсоры
42. Процедуры, поддерживающие курсоры
• sp_cursor_list• sp_describe_cursor
• sp_describe_cursor_columns
• sp_describe_cursor_tables