Коллекция элементларига мурожаат қилиш
Хар бир элементга мурожаат қилиш учун коллекция номи ва қавс ичига олинган индексни кўрсатиш лозим. Индекс қайси элеменга мурожаат қилинаётганлигини аниқлаб беради. Мурожаат қилишнинг синтаксиси қуйидагича:
Коллекция_номи(индекс)
бу ерда индекс бутун сонни қайтарувчи ифода. Индекслашган жадваллар учун рухсат этилган индекслар интервали -2147483647 .. 2147483647 ташкил қилади. Ичма-ич жойлашган жадваллар учун рухсат этилган индекслар интервали 1 .. 2147483647 иборат. Ва массивлар учун 1 .. ўлчов_чегараси.
Барча ифодаларда коллекцияларга мурожаат қилиш мумкин. Қуйидаги мисолда ичма-ич жойлашган names жадвали элементларига мурожаат қилинаяпти:
DECLARE
TYPE Roster IS TABLE OF VARCHAR2(15);
names Roster := Roster('J Hamil', 'D Caruso', 'R Singh', ...);
i BINARY_INTEGER;
BEGIN
...
IF names(i) = 'J Hamil' THEN
...
END IF;
END;
Қуйидаги мисолда қисмдастурларни чақиришда коллекцияларга мурожаат қилиш намойиш этилган:
DECLARE
TYPE Roster IS TABLE OF VARCHAR2(15);
names Roster := Roster('J Hamil', 'D Piro', 'R Singh', ...);
i BINARY_INTEGER;
BEGIN
...
verify_name(names(i)); -- процедурани чақириш
END;
Коллекцияни қайтарувчи функцияни чақиришда колеция элементига мурожаат қилиш учун қуйидаги синтаксисдан фойдаланинг:
Функция_номи(параметрлар_рўйхати)(индекс)
Қуйидаги мисолда new_hires функция қайтарадиган массивнинг учинчи элементига мурожаат қилинаяпти
DECLARE
TYPE Staff IS VARRAY(20) OF Employee;
staffer Employee;
FUNCTION new_hires (hiredate DATE) RETURN Staff IS ...
BEGIN
staffer := new_hires('16-OCT-96')(3); /* функцияни чақириш */
...
END;
Коллекцияларга қиймат бериш ва солиштириш
Битта коллекцияни бошкасига қиймат сифатида INSERT, UPDATE, FETCH, ёки SELECT жумлалари ёрдамида бериш мумкин. Бунда коллекциялар бир хил турга эга бўлиши лозим. Бир хил турдаги Элементларининг бир хил турлилиги етарли эмас.
DECLARE
TYPE Clientele IS VARRAY(100) OF Customer;
TYPE Vips IS VARRAY(100) OF Customer;
group1 Clientele := Clientele(...);
group2 Clientele := Clientele(...);
group3 Vips := Vips(...);
BEGIN
group2 := group1;
group3 := group2; -- нотўғри, берилганлар тури ҳар хил
Атомик null коллекцияни бошқа коллекцияга берсангиз, бошқа коллекция атомик null бўлиб қолади (ва қайтадан инициализация қилиниши лозим). Қуйидаги мисолни қараймиз:
DECLARE
TYPE Clientele IS TABLE OF Customer;
group1 Clientele := Clientele(...); -- инициализация қилинди
group2 Clientele; -- атомик null
BEGIN
IF group1 IS NULL THEN ... -– шарт FALSE қайтаради
group1 := group2;
IF group1 IS NULL THEN ... -– шарт TRUE қайтаради
...
END;
Шунга ўхшаб, агар коллекцияга NULL қиймат берилса, коллекция атомик null бўлади.
Do'stlaringiz bilan baham: |