- •Бази даних Робота з скбд MySql
- •6.050103 «Програмна інженерія»
- •1 Лабораторна робота № 1 «Знайомство з пакетом «Денвер»
- •1.1 Мета роботи
- •1.2 Завдання до лабораторної роботи
- •1.3 Основні теоретичні відомості
- •2.2 Завдання до лабораторної роботи
- •2.3 Основні теоретичні відомості
- •2.3.1 Створення нової бази даних:
- •2.3.2 Створення та редагування таблиць:
- •Контрольні питання
- •3 Лабораторна робота № 3 «Проектування запитів»
- •3.1 Мета роботи
- •3.2 Завдання до лабораторної роботи
- •3.3 Основні теоретичні відомості
- •3.3.2 Розробка запитів до бази даних
- •Контрольні питання
- •2 Лабораторна робота № 2 «Створення бази даних»
- •2.1 Мета роботи
- •Вибір рядків: речення where
- •Агрегатні функції
- •Групування даних
- •З'єднання таблиць
- •Контрольні питання
- •Контрольні питання
- •4 Лабораторна робота № 5 «Робота з поданнями»
- •4.1 Мета роботи
- •4.2 Завдання до лабораторної роботи
- •4.3 Основні теоретичні відомості
- •Insert into Топ_Продавці values (201, 'Гриценко', 'Запоріжжя', 250);
- •Контрольні питання
- •5 Лабораторна робота № 5 «Вбудовані процедури та курсори»
- •5.1 Мета роботи
- •5.2 Завдання до лабораторної роботи
- •5.3 Основні теоретичні відомості
- •5.3.1 Вбудовані процедури
- •5.3.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,
Функції курсорів.
Як створити курсор?
Властивості курсорів.
