Курсор Oracle PL / SQL: неявный, явный, цикл FOR с курсором (пример)

Содержание:

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.