Основы (асослар)


Индекслаштирилган жадваллар ва ичма-ич жойлашган жадваллар


Download 0.95 Mb.
bet16/58
Sana28.12.2022
Hajmi0.95 Mb.
#1011518
1   ...   12   13   14   15   16   17   18   19   ...   58
Bog'liq
PL-SQL Маъруза матни

Индекслаштирилган жадваллар ва ичма-ич жойлашган жадваллар


Индекслаштирилган жадваллар ва ичма-ич жойлашган жадваллар жуда ўхшашдирлар. Масалан, улар бир хил тузилмага эга ва уларнинг элементларига бар хил тарзда кирилади. Улар орасидаги асосий фарқ эса шундаки, ичма-ич жойлашган жадвалларни берилганлар базасидаги устунларда сақлаш мумкин, индекслаштирилган жадвалларни эса мумкин эмас. Яна таъкидлаб ўтиш жоизки, индекслаштирилган жадвал берилганлар базасида сақланмайди.

Массивлар


VARRAY туридаги элементлар массивлар дейилади. Массив элементига мурожаат қилиш учун стандарт индекслаш синтаксисидан фойдаланасиз:
10 ўлчовли массив

Массив максимал ўлчовига эга бўлиб, уни унинг турини тавсифлашда аниқлашингиз лозим. Унинг индекси фиксирланган 1-қуйи чегарага эга ва кенгайиши мумкин бўлган юқори чегарага эгадир. Шундай қилиб массив ўзгарувчан сондаги элементлардан (нолдан унинг турини тавсифида аниқланган максимумигача) иборат бўлиши мумкин.

Массивлар ва ичма-ич жойлашган жадваллар


Ичма-ич жойлашган жадваллар массивлардан қуйидаги жиҳатлардан фарқ қилади:

  • Массивлар максимал ўлчовга эга, ичма-ич жойлашган жадваллар бундай эмас.

  • Массив индивидуал элементларини ўчириб бўлмайди, шу билан бирга ичма-ич жойлашган жадвал элементини ўчиришингиз мумкин.

  • Oracle массивни қаторда сақлайди, ичма-ич жойлашган жадвални эса сақланадиган жадвалда сақлайди.

  • Берилганлар базасида сақлашда массивлар ўзиниг тартибини ва индексларини сақлаб қолади, ичма-ич жойлашган жадваллар эса бундай эмас.

Коллекцияларни аниқлаш ва эълон қилиш


Коллекцияларни ташкил қилиш учун, аввал коллекция турини аниқлаб, сўнг ушбу турдаги колекцияни эълон қилиш лозим. TABLE ва VARRAY турларини ихтиёрий PL/SQL блоки, қисмдастур ёки пакетнинг эълон қилиш соҳасида эълон қилиш мумкин. Ичма-ич жойлашган жадвалларда қуйидаги синтаксисдан фойдаланинг
TYPE тур_номи IS TABLE OF элемент_тури [NOT NULL];

ва массивлар учун қуйидаги синтаксисдан фойдаланинг:


TYPE тур_номи IS {VARRAY | VARYING ARRAY} (ўлчов_чегараси)
OF элемент_тури [NOT NULL];

Бу ерда тур_номи тур аниқловчиси бўлиб, келгусида коллекцияларни эълон қилиш учун ишлатилади, ўлчов_чегараси мусбат бутун литерал ва элемент_тури ихтиёрий PL/SQL берилганлар тури (қуйидагилардан ташқари):


BINARY_INTEGER, PLS_INTEGER
BOOLEAN
BLOB, CLOB (фақат массивлар учун қўлланилади)
LONG, LONG RAW
NATURAL, NATURALN
NCHAR, NCLOB, NVARCHAR2
BLOB ёки CLOB атрибутли объект тури (фақат массивлар учун қўлланилади)
TABLE ва VARRAY атрибутли объект тури
POSITIVE, POSITIVEN
REF CURSOR
SIGNTYPE
STRING
TABLE
VARRAY
Агар элемент_тури ёзув тури бўлса, ёзувдаги ҳар бир қатор скаляр турга ёки объект турига тегишли бўлиши лозим.
Идекслаштирилган жадваллар учун қуйидаги синтаксисдан фойдаланинг:
TYPE тур_номи IS TABLE OF элемент_тури [NOT NULL]
INDEX BY BINARY_INTEGER;

Ичма-ич жойлашган жадваллар ва массивлардан фарқли равишда индекслаштирилган жадвалларда қуйидаги элемент турлари ҳам бўлиши мумкин: BINARY_INTEGER, BOOLEAN, LONG, LONG RAW, NATURAL, NATURALN, PLS_INTEGER, POSITIVE, POSITIVEN, SIGNTYPE, ва STRING. қуйида келтирилган мисолда индекслаштирилган ёзувлар жадвали эълон қилинади. Жадвалнинг ҳар бир элементи берилганлар базасидаги emp жадвали қаторини сақлайди.


DECLARE
TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE
INDEX BY BINARY_INTEGER;
emp_tab EmpTabTyp;
BEGIN
SELECT * INTO emp_tab(7468) FROM emp WHERE empno = 7788;

VARRAY турини аниқлашда, сиз унинг максимал ўлчовини кўрсатишингиз лозим. Қуйидаги миcолда 366-тагача саналарни сақловчи массив тури аниқланган:


DECLARE
TYPE Calendar IS VARRAY(366) OF DATE;

Узгарувчи ёки берилганлар базаси устунидаги берилганлар турини аниқлашга имкон берувчи элемент турини аниқлаш учун %TYPE фойдаланиш мумкин. Берилганлар базасидаги жадвал ёки курсор қатори кўринишидаги турни аниқлашга имкон берувчи %ROWTYPE ҳам фойдаланишингиз мумкин:


DECLARE
TYPE EmpList IS TABLE OF emp.ename%TYPE; -- устунга асосланган
CURSOR c1 IS SELECT * FROM dept;
TYPE DeptFile IS VARRAY(20) OF c1%ROWTYPE; -- курсорга асосланган

Навбатдаги мисолда, элемент турини аниқлаш учун RECORD туридан фойдаланишингиз мумкин:


DECLARE
TYPE AnEntry IS RECORD (
term VARCHAR2(20),
meaning VARCHAR2(200));
TYPE Glossary IS VARRAY(250) OF AnEntry;

Охирги мисолда, элемент турига NOT NULL чеклагич қўйилади:


DECLARE
TYPE EmpList IS TABLE OF emp.empno%TYPE NOT NULL;



Download 0.95 Mb.

Do'stlaringiz bilan baham:
1   ...   12   13   14   15   16   17   18   19   ...   58




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling