Курсор Oracle PL / SQL: неявний, явний, курсор FOR Loop (Приклад)

Зміст:

Anonim

Що таке КУРСОР у PL / SQL?

Курсор - це вказівник на цю контекстну область. Oracle створює контекстну область для обробки оператора SQL, який містить всю інформацію про оператор.

PL / SQL дозволяє програмісту керувати контекстною областю за допомогою курсору. Курсор містить рядки, повернені оператором SQL. Набір рядків, який утримує курсор, називається активним набором. Ці курсори також можна назвати так, щоб на них можна було посилатись з іншого місця коду.

У цьому підручнику ви дізнаєтесь-

  • Неявний курсор
  • Явний курсор
  • Атрибути курсору
  • Оператор курсору FOR

Курсор буває двох типів.

  • Неявний курсор
  • Явний курсор

Неявний курсор

Всякий раз, коли в базі даних відбуваються будь-які операції DML, створюється неявний курсор, який містить зазначені рядки в цій конкретній операції. Ці курсори не можуть бути названі і, отже, ними не можна керувати або посилатися з іншого місця коду. Ми можемо посилатися лише на найновіший курсор через атрибути курсору.

Явний курсор

Програмістам дозволено створювати іменовану контекстну область для виконання своїх операцій DML, щоб отримати більше контролю над нею. Явний курсор повинен бути визначений у розділі декларації блоку PL / SQL, і він створюється для оператора 'SELECT', який потрібно використовувати в коді.

Нижче наведені кроки, які стосуються роботи з явними курсорами.

  • Оголошення курсору

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

  • Відкриття курсору

    Відкриття курсора дасть PL / SQL розподіл пам'яті для цього курсору. Це зробить курсор готовим до отримання записів.

  • Отримання даних із курсору

    У цьому процесі виконується оператор 'SELECT', а отримані рядки зберігаються у виділеній пам'яті. Зараз вони називаються активними наборами. Отримання даних із курсору - це діяльність на рівні запису, що означає, що ми можемо отримати доступ до даних способом запису за записом.

    Кожен оператор отримання отримає один активний набір і містить інформацію про цей конкретний запис. Цей вислів такий самий, як оператор 'SELECT', який отримує запис і призначає змінну в реченні 'INTO', але він не створює жодних винятків.

  • Закриття курсору

    Як тільки весь запис отримано зараз, нам потрібно закрити курсор, щоб звільнилася пам’ять, виділена цій контекстній області.

Синтаксис:

DECLARECURSOR  IS ;BEGINFOR I IN LOOP… END LOOP;END;
  • У наведеному вище синтаксисі частина оголошення містить оголошення курсору.
  • Курсор створюється для оператора 'SELECT', який подається в декларації курсора.
  • У частині виконання оголошений курсор встановлюється у циклі FOR, а змінна циклу 'I' в цьому випадку поводиться як змінна курсора.

Приклад 1 : У цьому прикладі ми спроектуємо все ім’я співробітника з таблиці emp, використовуючи цикл курсору-FOR.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/

Вихідні дані

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Пояснення коду:

  • Рядок коду 2 : Оголошення курсора guru99_det для виразу "SELECT emp_name FROM emp".
  • Рядок коду 4 : Побудова циклу 'FOR' для курсора із змінною циклу lv_emp_name.
  • Рядок коду 5: Друк імені працівника в кожній ітерації циклу.
  • Кодовий рядок 8: Вийти з циклу

Примітка: У циклі Cursor-FOR атрибути курсора використовувати не можна, оскільки відкриття, отримання та закриття курсора виконується неявно за допомогою циклу FOR.