Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КСК_БД-2 методвказівки-2015-NEW.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

5.3.2 Курсори

Курсор – це посилання на контекстну область пам'яті. У деяких реалізаціях мови програмування SQL (Oracle, Microsoft SQL) при виконанні запиту отримується результуючий набір та зв’язаний із ним покажчик поточного запису. Курсор – це віртуальна таблиця, яка являє собою альтернативне сховище даних. Але курсор дозволяє звертатися до власних даних, як до даних звичайного масиву. Використовуються курсори у збережених процедурах.

Курсор не може використовуватися у MySQL сам по собі. Він є важливим компонентом збережених процедур.

За допомогою курсору є можливість перебрати набір даних та обробити кожен запис у відповідності з певними завданнями.

Оскільки курсор реалізується у збереженій процедурі, то він має усі переваги та недоліки властиві збереженим процедурам (контроль доступу, прекомпіляція, труднощі налагодження та інше).

Офіційну документацію щодо курсорів можна знайти у [8].

Курсори повинні бути оголошені до їх використання. Змінні з умовами оголошуються поперед курсорів. Обробники оголошуються строго після оголошення курсорів.

Mysql підтримує курсори в збережених процедурах. Далі наведено короткий синтаксис створення та використання курсору.

1

DECLARE cursor-name CURSOR FOR SELECT ...;       /*Оголошення курсору та його заповнення */ 

2

DECLARE  CONTINUE HANDLER FOR NOT FOUND          /*Що робити, коли більше немає записів*/ 

3

OPEN cursor-name;                                /*Відкрити курсор*/ 

4

FETCH cursor-name INTO variable [, variable];    /*Встановлення покажчика на наступний рядок (якщо рядок існує). При цьому, значення полів поточного запису присвоюються змінним, які вказані оператором FETCH. Якщо більше рядків не доступно, то відбувається зміна значення змінної SQLSTATE на 02000 (SQLSTATE=00000 свідчить про успішне виконання оператора). Для виловлення цієї події необхідно встановити обробник:

HANDLER FOR SQLSTATE '02000'

*/ 

5

CLOSE cursor-name;                               /*Закрити курсор*/ 

Далі наведемо деякі прості операції з використанням курсору:

01

CREATE PROCEDURE `proc_CURSOR` (OUT param1 INT) 

02

BEGIN 

03

    DECLARE a, b, c INT; 

04

    DECLARE cur1 CURSOR FOR SELECT col1 FROM table1; 

05

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET b=1; 

06

    OPEN cur1; 

07

    SET b = 0; 

08

    SET c = 0; 

13

    WHILE b = 0 DO 

14

        FETCH cur1 INTO a; 

15

        IF b = 0 THEN 

16

            SET c = c + a; 

17

    END IF; 

18

    END WHILE; 

19

    CLOSE cur1; 

20

    SET param1 = c; 

21

END // 

Курсори мають три властивості, які необхідно зрозуміти, щоб уникнути одержання несподіваних результатів:

  • Нечутливість: курсор, що відкрився одного разу, не буде відображати зміни в таблиці, що сталися пізніше. Дійсно, Mysql не гарантує те, що курсор обновиться, так що не сподівайтеся на це;

  • Доступність тільки для читання: курсори не можна змінювати;

  • Без перемотування: курсор здатний проходити тільки в одному напрямку  уперед, крім того, неможливо пропускати рядки, не вибираючи їх.

Контрольні питання:

  • Призначення збережених процедур.

  • Характеристики збереженої процедури.

  • Виклик збереженої процедури.

  • Що таке змінні, робота з ними?

  • Структури керування потоками в Mysql,

  • Функції курсорів.

  • Як створити курсор?

  • Властивості курсорів.