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

Съдържание:

Anonim

Какво е CURSOR в PL / SQL?

Курсорът е указател към тази контекстна област. Oracle създава контекстна област за обработка на SQL израз, който съдържа цялата информация за него.

PL / SQL позволява на програмиста да контролира контекстната област чрез курсора. Курсор съдържа редовете, върнати от SQL израза. Наборът от редове, които курсорът съдържа, се нарича активен набор. Тези курсори също могат да бъдат именувани, така че да могат да бъдат препращани от друго място на кода.

В този урок ще научите-

  • Имплицитен курсор
  • Изричен курсор
  • Атрибути на курсора
  • За изявление на курсора на цикъла

Курсорът е от два вида.

  • Имплицитен курсор
  • Изричен курсор

Имплицитен курсор

Винаги, когато се появят някакви 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 : Изграждане на цикъла „ЗА“ за курсора с променливата на цикъла lv_emp_name.
  • Кодов ред 5: Отпечатване на името на служителя във всяка итерация на цикъла.
  • Кодов ред 8: Излезте от цикъла

Забележка: В цикъл Cursor-FOR атрибутите на курсора не могат да се използват, тъй като отварянето, извличането и затварянето на курсора се извършва имплицитно от FOR цикъл.