Шта је КУРСОР у ПЛ / СКЛ-у?
Курсор је показивач на ово контекстуално подручје. Орацле креира контекстуално подручје за обраду СКЛ израза који садржи све информације о изразу.
ПЛ / СКЛ омогућава програмеру да контролише подручје контекста кроз курсор. Курсор садржи редове које враћа СКЛ израз. Скуп редова које курсор држи назива се активним скупом. Ови показивачи такође могу бити именовани тако да се на њих може упутити са другог места кода.
У овом упутству ћете научити-
- Имплицитни курсор
- Експлицитни курсор
- Атрибути курсора
- Изјава за курсор петље
Курсор је две врсте.
- Имплицитни курсор
- Експлицитни курсор
Имплицитни курсор
Кад год се у бази података појаве било какве ДМЛ операције, ствара се имплицитни курсор који садржи погођене редове у тој одређеној операцији. Ови показивачи се не могу именовати и, према томе, не могу се контролисати или упутити са другог места кода. Кроз атрибуте курсора можемо се позивати само на најновији курсор.
Експлицитни курсор
Програмерима је дозвољено да креирају именовано контекстуално подручје за извршавање својих ДМЛ операција како би добили већу контролу над њим. Експлицитни курсор треба да буде дефинисан у одељку декларације ПЛ / СКЛ блока и креиран је за израз 'СЕЛЕЦТ' који треба да се користи у коду.
Испод су кораци који укључују рад са експлицитним курсорима.
- Проглашавање курсора
Декларација курсора једноставно значи створити једно именовано подручје контекста за израз 'СЕЛЕЦТ' који је дефинисан у делу декларације. Име ове контекстуалне области је исто као и име курсора.
- Отварање курсора
Отварањем курсора наложит ћете ПЛ / СКЛ-у да додијели меморију за овај курсор. Курсор ће бити спреман за преузимање записа.
- Преузимање података из курсора
У овом процесу извршава се наредба 'СЕЛЕЦТ' и дохваћени редови се чувају у додељеној меморији. Они се сада називају активним скуповима. Преузимање података из курсора је активност на нивоу записа која значи да им можемо приступити на начин евиденције.
Свака наредба дохваћања дохвата један активни скуп и садржи информације о том одређеном запису. Овај израз је исти као израз „СЕЛЕЦТ“ који преузима запис и додељује променљивој у клаузули „ИНТО“, али неће изузети.
- Затварање курсора
Када се сав запис сада преузме, морамо да затворимо курсор тако да се ослободи меморија додељена овој контекстној области.
Синтакса:
DECLARECURSORIS
- У горњој синтакси, део декларације садржи декларацију курсора и променљиву курсора у којој ће бити додељени преузети подаци.
- Курсор се креира за израз 'СЕЛЕЦТ' који је дат у декларацији курсора.
- У извршном делу, декларисани курсор се отвара, преузима и затвара.
Атрибути курсора
И имплицитни курсор и експлицитни курсор имају одређене атрибуте којима се може приступити. Ови атрибути дају више информација о операцијама курсора. Испод су различити атрибути курсора и њихова употреба.
Атрибут курсора | Опис |
%НАШАО | Враћа логички резултат 'ТРУЕ' ако је најновија операција дохваћања успјешно преузела запис, иначе ће вратити ФАЛСЕ. |
%НИЈЕ ПРОНАЂЕН | Ово ради супротно од% ФОУНД и вратиће 'ТРУЕ' ако најновија операција дохваћања није могла да преузме ниједан запис. |
%ЈЕ ОТВОРЕН | Враћа логички резултат 'ТРУЕ' ако је задати курсор већ отворен, у супротном враћа 'ФАЛСЕ' |
% РОВЦОУНТ | Враћа нумеричку вредност. Даје стварни број записа на које је ДМЛ активност утицала. |
Пример 1 : У овом примеру видећемо како се декларише, отвори, преузме и затвори експлицитни курсор.
Курсор ћемо пројектовати цело име запосленог из емп табеле. Такође ћемо користити атрибут курсора да поставимо петљу да преузме сав запис са курсора.
DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;lv_emp_name emp.emp_name%type;BEGINOPEN guru99_det;LOOPFETCH guru99_det INTO lv_emp_name;IF guru99_det%NOTFOUNDTHENEXIT;END IF;Dbms_output.put_line(‘Employee Fetched:‘||lv_emp_name);END LOOP;Dbms_output.put_line(‘Total rows fetched is‘||guru99_det%R0WCOUNT);CLOSE guru99_det;END:/
Оутпут
Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYTotal rows fetched is 3
Објашњење кода:
- Редак кода 2 : Декларисање курсора гуру99_дет за израз 'СЕЛЕЦТ емп_наме ФРОМ емп'.
- Линија 3 : Декларисање променљиве лв_емп_наме.
- Линија 5 : Отварање курсора гуру99_дет.
- Редак 6: Постављање наредбе Басиц лооп да преузме све записе у табели 'емп'.
- Редак кода 7: Дохваћа податке гуру99_дет и додељује вредност лв_емп_наме.
- Редак 9 кода: Коришћење атрибута курсора „% НОТФОУНД“ да бисте пронашли да ли је преузет сав запис у курзору. Ако се преузме, вратиће „ТРУЕ“ и контрола ће изаћи из петље, у супротном ће контрола наставити да преузима податке из курсора и исписује податке.
- Линија кода 11: ЕКСИТ услов за наредбу петље.
- Редак кода 12: Одштампајте преузето име запосленог.
- Редак 14: Коришћење атрибута курсора „% РОВЦОУНТ“ за проналажење укупног броја записа који су погођени / дохваћени у курзору.
- Редак кода 15: Након изласка из петље курсор се затвара и додељена меморија се ослобађа.
Изјава за курсор петље
Израз „ФОР ЛООП“ се може користити за рад са курсорима. Можемо дати име курсора уместо ограничења опсега у наредби петље ФОР, тако да ће петља радити од првог записа курсора до последњег записа курсора. Променљива курсора, отварање курсора, дохваћање и затварање курсора вршиће се имплицитно помоћу петље ФОР.
Синтакса:
DECLARECURSORIS
- У горњој синтакси, део декларације садржи декларацију курсора.
- Курсор се креира за израз 'СЕЛЕЦТ' који је дат у декларацији курсора.
- У извршном делу, декларисани курсор је постављен у ФОР петљу и променљива петље 'И' ће се понашати као променљива курсора у овом случају.
Пример 1 : У овом примеру ћемо пројектовати цело име запосленог из емп табеле користећи петљу курсора-ФОР.
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 : Декларисање курсора гуру99_дет за израз 'СЕЛЕЦТ емп_наме ФРОМ емп'.
- Линија кода 4 : Конструисање петље 'ФОР' за курсор са променљивом петље лв_емп_наме.
- Линија 5: Штампање имена запосленог у свакој итерацији петље.
- Шифра 8: Изађите из петље
Напомена: У петљи Цурсор-ФОР атрибути курсора не могу се користити јер се отварање, дохваћање и затварање курсора имплицитно врши помоћу петље ФОР.