Орацле ПЛ / СКЛ БУЛК ЦОЛЛЕЦТ: ФОРАЛЛ Пример

Преглед садржаја:

Anonim

Шта је БУЛК ЦОЛЛЕЦТ?

БУЛК ЦОЛЛЕЦТ смањује пребацивање контекста између СКЛ и ПЛ / СКЛ механизма и омогућава СКЛ механизму да одједном преузима записе.

Орацле ПЛ / СКЛ пружа функционалност скупног дохвата записа, уместо појединачног. Овај БУЛК ЦОЛЛЕЦТ се може користити у наредби „СЕЛЕЦТ“ за попуњавање записа скупно или за скупно преузимање курсора. Будући да БУЛК ЦОЛЛЕЦТ запис преузима у БУЛК, клаузула ИНТО увек треба да садржи променљиву типа колекције. Главна предност употребе БУЛК ЦОЛЛЕЦТ-а је што повећава перформансе смањењем интеракције између базе података и ПЛ / СКЛ механизма.

Синтакса:

SELECT  BULK COLLECT INTO bulk_varaible FROM 
;FETCH  BULK COLLECT INTO ;

У горњој синтакси, БУЛК ЦОЛЛЕЦТ се користи за прикупљање података из израза „СЕЛЕЦТ“ и „ФЕТЦХ“.

У овом упутству ћете научити-

  • Клаузула ФОРАЛЛ
  • Клаузула ЛИМИТ
  • БУЛК ЦОЛЛЕЦТ Атрибути

Клаузула ФОРАЛЛ

ФОРАЛЛ омогућава скупно извршавање ДМЛ операција на подацима. Слична је оној у наредби ФОР петље, осим у ФОР петљи ствари се дешавају на нивоу записа, док у ФОРАЛЛУ нема концепта ЛООП. Уместо тога, истовремено се обрађују целокупни подаци присутни у датом опсегу.

Синтакса:

FORALL in;

У горњој синтакси, дата ДМЛ операција ће се извршити за целокупне податке који су присутни између нижег и вишег опсега.

Клаузула ЛИМИТ

Концепт скупног прикупљања учитава целокупне податке у циљну променљиву прикупљања као скуп, тј. Цели подаци ће се попунити у променљиву прикупљања једним потезом. Али ово није упутно када је укупан запис који треба учитати веома велик, јер када ПЛ / СКЛ покуша да учита целокупне податке, троши више меморије сесије. Стога је увек добро ограничити величину ове операције скупљања масовних количина.

Међутим, ово ограничење величине може се лако постићи увођењем услова РОВНУМ у израз „СЕЛЕЦТ“, док у случају курсора то није могуће.

Да би превазишао ово, Орацле је обезбедио клаузулу 'ЛИМИТ' која дефинише број записа које треба укључити у групу.

Синтакса:

FETCH  BULK COLLECT INTO  LIMIT ;

У горњој синтакси, наредба за преузимање курсора користи наредбу БУЛК ЦОЛЛЕЦТ заједно са клаузулом ЛИМИТ.

БУЛК ЦОЛЛЕЦТ Атрибути

Слично атрибутима курсора, БУЛК ЦОЛЛЕЦТ има% БУЛК_РОВЦОУНТ (н) који враћа број редова погођених у н- том ДМЛ изразу израза ФОРАЛЛ, односно даће број записа који су погођени у ФОРАЛЛ изразу за сваку појединачну вредност из колекције променљива. Израз 'н' означава редослед вредности у колекцији, за који је потребан број редова.

Пример 1 : У овом примеру ћемо пројектовати сва имена запослених из емп табеле помоћу БУЛК ЦОЛЛЕЦТ, а такође ћемо повећати плату свих запослених за 5000 користећи ФОРАЛЛ.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;TYPE lv_emp_name_tbl IS TABLE OF VARCHAR2(50);lv_emp_name lv_emp_name_tbl;BEGINOPEN guru99_det;FETCH guru99_det BULK COLLECT INTO lv_emp_name LIMIT 5000;FOR c_emp_name IN lv_emp_name.FIRST… lv_emp_name.LASTLOOPDbms_output.put_line(‘Employee Fetched:‘||c_emp_name);END LOOP:FORALL i IN lv_emp_name.FIRST… lv emp_name.LASTUPDATE emp SET salaiy=salary+5000 WHERE emp_name=lv_emp_name(i);COMMIT; Dbms_output.put_line(‘Salary Updated‘);CLOSE guru99_det;END;/

Оутпут

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYYSalary Updated

Објашњење кода:

  • Редак кода 2 : Декларисање курсора гуру99_дет за израз 'СЕЛЕЦТ емп_наме ФРОМ емп'.
  • Редак кода 3 : Декларисање лв_емп_наме_тбл као типа табеле ВАРЦХАР2 (50)
  • Линија кода 4 : Декларисање назива лв_емп_наме као типа лв_емп_наме_тбл.
  • 6. ред кода: Отварање курсора.
  • Редак кода 7: Преузимање курсора помоћу БУЛК ЦОЛЛЕЦТ са величином ЛИМИТ као 5000 променљивих интл лв_емп_наме.
  • Редак кода 8-11: Постављање петље ФОР за штампање свих записа у колекцији лв_емп_наме.
  • Шифра 12: Коришћење ФОРАЛЛ-а ажурирајући плату свих запослених за 5000.
  • Линија кода 14: Обављање трансакције.