Орацле ПЛ / СКЛ колекције: Варраис, Нестед & амп; Индекс по табелама

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

Anonim

Шта је колекција?

Збирка је уређена група елемената одређених типова података. То може бити колекција једноставног типа података или сложеног типа података (као што су кориснички дефинисани или типови записа).

У збирци је сваки елемент идентификован термином који се назива „индекс“. Свака ставка у колекцији додељена је јединственим индексом. Подаци из те колекције могу се манипулисати или дохватити позивањем на тај јединствени индекс.

Колекције су најкорисније ствари када треба обрадити или манипулисати великим подацима истог типа. Колекције се могу попуњавати и њима манипулисати као целина помоћу опције „БУЛК“ у Орацле-у.

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

  • Шта је колекција?
  • Варијабле
  • Угњежђене табеле
  • Индекс по табели
  • Конструктор и концепт иницијализације у колекцијама
  • Методе прикупљања

Колекције су класификоване на основу структуре, индекса и складиштења, као што је приказано у наставку.

  • Индекс по табелама (познат и као Асоцијативни низ)
  • Угњежђене табеле
  • Варијабле

У било ком тренутку, подаци у колекцији могу се означити са три појма Назив колекције, индекс, име поља / колоне као „<име колекције> (<субсцрипт>). <име_колоне>“. О овим горе поменутим категоријама сакупљања сазнаћете даље у одељку испод.

Варијабле

Варраи је метода прикупљања у којој је величина низа фиксна. Величина поља не може бити већа од фиксне вредности. Индекс Варраи је нумеричке вредности. Следе атрибути Варраис-а.

  • Величина горње границе је фиксна
  • Насељава се секвенцијално почевши од индекса '1'
  • Овај тип колекције је увек густ, односно не можемо избрисати ниједан елемент низа. Низ се може обрисати у целини или се може скратити од краја.
  • Будући да је увек густе природе, има врло малу флексибилност.
  • Прикладније је користити када је позната величина низа и изводити сличне активности на свим елементима низа.
  • Индекс и секвенца увек остају стабилни, тј. Индекс и број збирке су увек исти.
  • Пре употребе у програмима потребно их је иницијализовати. Било која операција (осим операције ПОСТОЈИ) на неиницијализованој колекцији избациће грешку.
  • Може се креирати као објекат базе података, који је видљив у целој бази података или унутар потпрограма, који се може користити само у том потпрограму.

Доња слика ће схематски објаснити алокацију Варраи-а (густе).

Субсцрипт 1 2 3 4 5 6 7
Вредност Ксиз Дфв Сде Цкс Вбц Нху Кве

Синтакса за ВАРРАИ:

TYPE  IS VARRAY () OF ;
  • У горњој синтакси, име_типа је декларисано као ВАРРАИ типа 'ДАТА_ТИПЕ' за дато ограничење величине. Тип података може бити или једноставан или сложен тип.

Угњежђене табеле

Угњежђена табела је колекција у којој величина низа није фиксна. Има нумерички тип индекса. Испод је још описа о угнежђеном типу табеле.

  • Угњежђена табела нема горње ограничење величине.
  • Будући да горња граница величине није фиксна, колекцију, меморију треба продужити сваки пут пре него што је употребимо. Колекцију можемо проширити помоћу кључне речи „ЕКСТЕНД“.
  • Попуњава се секвенцијално, почевши од индекса '1'.
  • Ова врста колекције може бити и густа и ретка , односно колекцију можемо створити као густу, а појединачни елемент низа можемо и насумично избрисати, што га чини ретким.
  • Даје већу флексибилност у вези са брисањем елемента низа.
  • Чува се у системски генерисаној табели базе података и може се користити у одабраном упиту за дохватање вредности.
  • Индекс и секвенца нису стабилни, тј. Индекс и број елемента низа могу се разликовати.
  • Пре употребе у програмима потребно их је иницијализовати. Било која операција (осим операције ПОСТОЈИ) на неиницијализованој колекцији ће довести до грешке.
  • Може се креирати као објекат базе података, који је видљив у целој бази података или унутар потпрограма, који се може користити само у том потпрограму.

Доња слика ће схематски објаснити расподјелу угнијежђене таблице (густе и ријетке) у меморији. Простор елемената у црној боји означава празан елемент у колекцији, тј. Оскудан.

Субсцрипт 1 2 3 4 5 6 7
Вредност (густа) Ксиз Дфв Сде Цкс Вбц Нху Кве
Вредност (ретка) Кве Асд Афг Асд Вер

Синтакса за угнежђену табелу:

TYPE  IS TABLE OF ;
  • У горњој синтакси, име_типа је декларисано као угнежђена колекција табеле типа 'ДАТА_ТИПЕ'. Тип података може бити или једноставан или сложен тип.

Индекс по табели

Индекс по табели је колекција у којој величина низа није фиксна. За разлику од осталих типова колекције, у збирци индекса по табели индекс може садржати корисник. Следе атрибути индекса по табели.

  • Индекс може бити целог броја или низа. У време стварања колекције, треба поменути тип индекса.
  • Ове колекције се не чувају секвенцијално.
  • У природи су увек ретке.
  • Величина низа није фиксна.
  • Не могу се сачувати у колони базе података. Они ће бити створени и коришћени у било ком програму у тој одређеној сесији.
  • Дају већу флексибилност у погледу одржавања индекса.
  • Индекси такође могу бити негативног низа индекса.
  • Прикладније их је користити за релативно мање колективне вредности у којима се збирка може иницијализовати и користити у оквиру истих потпрограма.
  • Не треба их иницијализовати пре него што почнете да их користите.
  • Не може се креирати као објекат базе података. Може се креирати само унутар потпрограма, који се може користити само у том потпрограму.
  • БУЛК ЦОЛЛЕЦТ се не може користити у овом типу колекције, јер би индекс требао бити дат изричито за сваки запис у колекцији.

Сљедећа слика ће схематски објаснити додјелу меморије угнијежђене таблице (ријетке). Простор елемената у црној боји означава празан елемент у колекцији, тј. Оскудан.

Индекс (варцхар) ПРВИ ДРУГИ ТРЕЋЕ ЧЕТВРТИ ПЕТО ШЕСТО СЕДМА
Вредност (ретка) Кве Асд Афг Асд Вер

Синтакса за индекс по табели

TYPE  IS TABLE OF  INDEX BY VARCHAR2 (10);
  • У горњој синтакси, име_типа је декларисано као збирка индекса по табели типа 'ДАТА_ТИПЕ'. Тип података може бити или једноставан или сложен тип. Варијабла субсципрт / индек дата је као тип ВАРЦХАР2 са максималном величином као 10.

Конструктор и концепт иницијализације у колекцијама

Конструктори су уграђена функција коју пружа пророчиште која има исто име као објекат или колекције. Прво се извршавају кад год се објект или колекције упућују први пут у сесији. Испод су важни детаљи конструктора у контексту колекције:

  • За колекције, ове конструкторе треба позвати експлицитно да их иницијализују.
  • И табеле Варраи и угнијежђене требају се иницијализирати путем ових конструктора прије упућивања у програм.
  • Конструктор имплицитно проширује додељивање меморије за колекцију (осим Варраи), па конструктор такође може доделити променљиве колекцијама.
  • Додељивање вредности колекцији преко конструктора никада неће учинити колекцију оскудном.

Методе прикупљања

Орацле пружа многе функције за манипулацију и рад са колекцијама. Ове функције су веома корисне у програму за одређивање и модификовање различитих атрибута колекција. Следећа табела ће дати различите функције и њихов опис.

Метод Опис СИНТАКСА
ПОСТОЈИ (н) Ова метода ће вратити логичке резултате. Вратиће 'ТРУЕ' ако н- ти елемент постоји у тој колекцији, у супротном ће вратити ФАЛСЕ. У неиницијализованој колекцији могу се користити само функције ПОСТОЈИ <име_збирке> .ПОСТОЈИ (положај_елемента)
ЦОУНТ Даје укупан број елемената присутних у колекцији <име_збирке> .ЦОУНТ
ОГРАНИЧЕЊЕ Враћа максималну величину колекције. За Варраи ће вратити фиксну величину која је дефинисана. За угнежђену табелу и индекс по табели даје НУЛЛ <име_збирке> .ЛИМИТ
ПРВИ Враћа вредност прве индексне променљиве (индекс) збирки <име_збирке>. ПРВИ
ПОСЛЕДЊА Враћа вредност последње променљиве индекса (индекс) колекција <име_збирке> .ЛАСТ
ПРИОР (н) Враћа претходи индексној променљивој у колекцији н- тог елемента. Ако нема претходне вредности индекса, враћа се НУЛЛ <име_збирке> .ПРИОР (н)
ДАЉЕ (н) Враћа променљиву индекса у колекцији н- тог елемента. Ако нема успјеха, враћа се вриједност индекса НУЛЛ <име_колекције> .НАПРЕД (н)
ПРОШИРИТИ На крају проширује један елемент у колекцији <име_збирке> .ЕКСТЕНД
ПРОДУЖИ (н) Проширује н елемената на крају колекције <име_збирке> .ЕКСТЕНД (н)
ПРОДУЖИ (н, и) Проширује н копија и- ог елемента на крају колекције <име_збирке> .ЕКСТЕНД (н, и)
ТРИМ Уклања један елемент са краја колекције <име_збирке> .ТРИМ
ТРИМ (н) Уклања н елемената са краја колекције <име_збирке> .ТРИМ (н)
ИЗБРИШИ Брише све елементе из колекције. Чини збирку празном <име_збирке> .ДЕЛЕТЕ
ИЗБРИШИ (н) Брише н-ти елемент из колекције. Ако је н- ти елемент НУЛЛ, то неће ништа учинити <име_збирке> .ДЕЛЕТЕ (н)
ИЗБРИШИ (м, н) Брише елемент у опсегу од м- тог до н- тог у збирци <име_збирке> .ДЕЛЕТЕ (м, н)

Пример 1: Тип записа на нивоу потпрограма

У овом примеру ћемо видети како попунити колекцију помоћу „БУЛК ЦОЛЛЕЦТ“ и како упутити податке о колекцији.

DECLARETYPE emp_det IS RECORD(EMP_NO NUMBER,EMP_NAME VARCHAR2(150),MANAGER NUMBER,SALARY NUMBER);TYPE emp_det_tbl IS TABLE OF emp_det; guru99_emp_rec emp_det_tbl:= emp_det_tbl();BEGININSERT INTO emp (emp_no,emp_name, salary, manager) VALUES (1000,’AAA’,25000,1000);INSERT INTO emp (emp_no,emp_name, salary, manager) VALUES (1001,'XXX’,10000,1000);INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);INSERT INTO emp (emp_no,emp_name,salary, manager) VALUES (1003,’ZZZ’,'7500,1000);COMMIT:SELECT emp no,emp_name,manager,salary BULK COLLECT INTO guru99_emp_recFROM emp;dbms_output.put_line (‘Employee Detail');FOR i IN guru99_emp_rec.FIRST… guru99_emp_rec.LASTLOOPdbms_output.put_line (‘Employee Number: '||guru99_emp_rec(i).emp_no);dbms_output.put_line (‘Employee Name: '||guru99_emp_rec(i).emp_name);dbms_output.put_line (‘Employee Salary:'|| guru99_emp_rec(i).salary);dbms_output.put_line(‘Employee Manager Number:'||guru99_emp_rec(i).manager);dbms_output.put_line('--------------------------------');END LOOP;END;/

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

  • Линијска ознака 2-8 : Тип записа 'емп_дет' се декларише са колонама емп_но, емп_наме, плата и менаџер типа података БРОЈ, ВАРЦХАР2, БРОЈ, БРОЈ.
  • Редак кода 9: Стварање колекције 'емп_дет_тбл' елемента типа записа 'емп_дет'
  • Редак кода 10: Декларирање променљиве 'гуру99_емп_рец' као типа 'емп_дет_тбл' и иницијализација нулл конструктором.
  • Редак кода 12-15: Уметање узорака података у табелу 'емп'.
  • Редак кода 16: Предаја уметања трансакције.
  • Линија кода 17: Дохваћање записа из табеле 'емп' и попуњавање променљиве колекције као групног помоћу наредбе „БУЛК ЦОЛЛЕЦТ“. Сада променљива 'гуру99_емп_рец' садржи све записе који су присутни у табели 'емп'.
  • Линија кода 19-26: Постављање петље 'ФОР' помоћу појединачног штампања свих записа у колекцији. Метода прикупљања ФИРСТ и ЛАСТ се користи као доња и виша граница петље.

Излаз : Као што можете видети на горњем снимку екрана када се изврши горњи код, добићете следећи излаз

Employee DetailEmployee Number: 1000Employee Name: AAAEmployee Salary: 25000Employee Manager Number: 1000----------------------------------------------Employee Number: 1001Employee Name: XXXEmployee Salary: 10000Employee Manager Number: 1000----------------------------------------------Employee Number: 1002Employee Name: YYYEmployee Salary: 15000Employee Manager Number: 1000----------------------------------------------Employee Number: 1003Employee Name: ZZZEmployee Salary: 7500Employee Manager Number: 1000----------------------------------------------