Основы (асослар)
Индекслаштирилган жадваллар ва ичма-ич жойлашган жадваллар
Download 0.95 Mb.
|
PL-SQL Маъруза матни
- Bu sahifa navigatsiya:
- Массивлар
- Массивлар ва ичма-ич жойлашган жадваллар
- Коллекцияларни аниқлаш ва эълон қилиш
Индекслаштирилган жадваллар ва ичма-ич жойлашган жадвалларИндекслаштирилган жадваллар ва ичма-ич жойлашган жадваллар жуда ўхшашдирлар. Масалан, улар бир хил тузилмага эга ва уларнинг элементларига бар хил тарзда кирилади. Улар орасидаги асосий фарқ эса шундаки, ичма-ич жойлашган жадвалларни берилганлар базасидаги устунларда сақлаш мумкин, индекслаштирилган жадвалларни эса мумкин эмас. Яна таъкидлаб ўтиш жоизки, индекслаштирилган жадвал берилганлар базасида сақланмайди. Массивлар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: |
ma'muriyatiga murojaat qiling