Оператор відкриття курсору

Саме оператор відкриття курсору ініціює виконання базового запиту, який відповідає опису курсору, заданому в операторі DECLARE … CURSOR. При виконанні оператора OPEN СУБД здійснює семантичну перевірку курсора, тобто виконує етапи з 2 по 5 в алгоритмі виконання запитів (рис. 12.1), тому саме тут СУБД повертає коди помилок прикладній програмі, що повідомляють їй про результати виконання базового запиту. Помилки можуть виникнути в результаті неправильного завдання імен полів або імен вихідних таблиць або при спробі витягти дані з таблиць, до яких користувач не має доступу.

За стандартом СУБД повертає код завершення операції у спеціальній системній змінній SQLCODE. У прикладній програмі користувач може аналізувати цю змінну, що потрібно робити після виконання кожного оператора SQL. У разі невдалого виконання операції відкриття курсора СУБД повертає негативне значення SQLCODE.

У разі успішного завершення виконання оператора відкриття курсору набір даних, сформований в результаті базового запиту, залишається доступним користувачеві до моменту виконання оператора закриття курсору.

Однак слід пам'ятати, що СУБД автоматично закриває всі курсори у разі завершення транзакції (COMMIT) або відкату транзакції (ROLLBACK). Після того, як курсор закритий, його можна відкрити знову, але при цьому відповідний запит виконається заново. Тому припустимо, що вміст першого курсору не відповідатиме його вмісту при повторному відкритті, тому що за цей час змінилося стан БД.

Оператор читання чергового рядка курсору

Після відкриття вказівник поточного рядка встановлено перед першим рядком курсору. Стандартно оператор FETCH переміщує покажчик поточноїрядки на наступний рядок і надає базовим змінним значення стовпців, що відповідає поточному рядку.

Простий оператор FETCH має наступний синтаксис:

Оператор вилучення чергового рядка з курсору виглядатиме так:

FETCH Debtor_reader_cursor into

Розширений оператор FETCH має наступний синтаксис:

FETCH [NEXT PRIOR FIRST LAST

Тут параметр NEXT визначає вибір наступного рядка після поточного з базового набору рядків, пов'язаного з курсором. Параметр PRIOR визначає переміщення на попередній рядок по відношенню до поточного. Параметр FIRST визначає переміщення на перший рядок набору, а параметр LAST задає переміщення на останній рядок набору.

Однак для застосування розширеного оператора FETCH відповідно до стандарту SQL2 опис курсору обов'язково має містити ключове слово SCROLL. Іноді такі курсори називають у літературі курсорами, що прокручуються. До стандарту ці курсори увійшли порівняно недавно, тому в комерційних СУБД дуже часто оператори роботи з подібними курсорами серйозно відрізняються. Щоправда, реалії сьогодні змушують постачальників комерційних СУБД суворо дотримуватися останній стандарт SQL. У технічній документації можна зустріти дві версії синтаксису оператора FETCH: одну, яка відповідає стандарту, та іншу, яка розширює стандарт додатковими можливостями, що надаються лише СУБД для роботи з курсором.

Якщо ви припускаєте, що ваша БД може бути перенесена на іншу платформу, а це треба завжди передбачати, краще користуватися стандартними можливостями. У цьому випадку ваш додаток буде більш платформно-незалежним і легше його перенести на іншу СУБД.

Калькулятор

Сервісбезкоштовної оцінки вартості роботи

  1. Заповніть заявку. Фахівці розрахують вартість вашої роботи
  2. Розрахунок вартості прийде на пошту та по СМС

Номер вашої заявки

Зараз на пошту прийде автоматичний лист-підтвердження з інформацією про заявку.