

ЛЕКЦІЯ 13
ТЕМА: Курсори: принципи роботи

План
1 Поняття курсору
2 Реалізація курсорів в середовищі MS SQL Server
3 Управління курсором в середовищі MS SQL Server
Оголошення курсору Відкриття курсору Вибірка даних з курсору Зміна і видалення даних Закриття курсору

Курсор в SQL
це область в пам'яті бази даних, яка призначена для зберігання останнього оператора SQL
використовуються для вибору з бази даних деякої підмножини збереженої в ній інформації
деякі з них неявно створюються сервером бази даних, тоді як інші визначаються програмістами

Дії при роботі з курсорами
створення або оголошення курсору ;
відкриття курсору, тобто наповнення його даними, які зберігаються в багаторівневій пам'яті ;
вибірка з курсору і зміна з його допомогою рядків даних;
закриття курсору, після чого він стає неприступним для призначених для користувача програм;
звільнення курсору, тобто видалення курсору як об’єкту, оскільки його закриття необов’язково звільняє асоційовану з ним пам'ять.

Види курсорів
курсори SQL застосовуються в основному усередині тригерів, збережених процедур і сценаріїв;
курсори серверу діють на сервері і реалізують програмний інтерфейс додатків для ODBC, OLE DB, DB_Library;
курсори клієнта реалізуються на самому клієнті. Вони вибирають весь результуючий набір рядків з серверу і зберігають його локально, що дозволяє прискорити операції обробки даних за рахунок зниження втрат часу на виконання мережних операцій.

Категорії курсорів
Послідовні дозволяють вибирати дані тільки в одному напрямі – від початку до кінця.
Прокручувані – надають можливість переміщення в обох напрямах і перехід до довільного рядка результуючого набору курсору.

Різновиди курсорів
Статичні курсори забезпечують стабільний погляд на дані. Вони застосовні для систем "складування" інформації: додатків для систем звітності або для статистичних і аналітичних цілей. Крім того, статичний курсор краще за інші справляється з вибіркою великої кількості даних.
Динамічний курсор підтримує дані в "живому" стані. При використовуванні динамічних курсорів не створюється повна копія початкових даних, а виконується динамічна вибірка з початкових таблиць тільки при зверненні користувача до тих або інших даних.
Курсор, керований набором ключів ідентифікує записи на момент вибірки, і тим самим відстежує зміни. Такий тип курсору корисний при реалізації прокрутки назад – тоді додавання і видалення рядів не видні, поки інформація не оновиться, а драйвер вибирає нову версію запису, якщо в неї були внесені зміни.
Послідовні курсори не дозволяють виконувати вибірку даних у зворотному напрямі. Користувач може вибирати рядки тільки від початку до кінця курсору .

Управління курсором
DECLARE – створення або оголошення курсору ;
OPEN – відкриття курсору, тобто наповнення його даними;
FETCH – вибірка з курсору і зміна рядків даних за допомогою курсору;
CLOSE – закриття курсору ;
DEALLOCATE – звільнення курсору, тобто видалення курсору як об'єкту.

Створення курсору
DECLARE ім”я_курсору [INSENSITIVE] [SCROLL] CURSOR
FOR SELECT_оператор
[FOR { READ_ONLY | UPDATE [Ім”я_колонки[,...n]]}]

Приклади
Приклад 1. Оголошення курсору
DECLARE abc CURSOR SCROLL FOR
SELECT * FROM Клієнт
Приклад 2. Використовування змінної для оголошення курсору.
DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM Клієнт