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


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


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

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


Коллекцияни бир марта эълон қилиб, сўнг ушбу турдаги коллекцияларни эълон қилишингиз мумкин:
CREATE TYPE CourseList AS TABLE OF VARCHAR2(10) -- турни аниқлайди
/
CREATE TYPE Student AS OBJECT (--объект ташкил этиш
id_num INTEGER(4),
name VARCHAR2(25),
address VARCHAR2(35),
status CHAR(2),
courses CourseList) -- ичма-ич жойлашган жадвални атрибут сифатида эълон қилиш
/

Сourses идентификатори ичма-ич жойлашган жадвални ифодалайди.


Қуйида келтирилган скрипт, массивларни сақловчи берилганлар базасидаги устунни очади. Массивларнинг ҳар бир элементи Project объектини сақлаш учун мўлжалланган .
CREATE TYPE Project AS OBJECT( --объект очади
project_no NUMBER(2),
title VARCHAR2(35),
cost NUMBER(7,2))
/
CREATE TYPE ProjectList AS VARRAY(50) OF Project -- VARRAY тури аниқланади
/
CREATE TABLE department ( -- берилганлар базасидаги жадвални очиш
dept_id NUMBER(2),
name VARCHAR2(15),
budget NUMBER(11,2),
projects ProjectList) -- массивни устун сифатида эълон қилиш
/

Қуйидаги мисол олдин эълон қилинган коллекция кўринишидаги берилганлар турини аниқлаш учун %TYPE фойдаланишни намойиш этади:


DECLARE
TYPE Platoon IS VARRAY(20) OF Soldier;
p1 Platoon;
p2 p1%TYPE;

Коллекцияларни функция ва процедураларнинг параметрлари сифатида эълон қилишингиз мумкин. Қуйидаги мисолда пакетдаги процедура учун формал параметр сифатида коллекция эълон қилинган:


CREATE PACKAGE personnel AS
TYPE Staff IS TABLE OF Employee;
...
PROCEDURE award_bonuses (members IN Staff);
END personnel;

RETURN жумласида ҳам коллекция турини аниқлашингиз мумкин:


DECLARE
TYPE SalesForce IS VARRAY(25) OF Salesperson;
FUNCTION top_performers (n INTEGER) RETURN SalesForce IS ...


Коллекцияларни инициализация қилиш ва унга ҳавола этиш


Ичма-ич жойлашган жадвал ёки массивни инициализация қилинмагунча, улар атомик бўш бўлади (яъни, коллекцияни ўзи (унинг элементлари эмас) бўш бўлади). Ичма-ич жойлашган жадвал ёки массивни инициализация қилиш учун тизим томонидан аниқланган ва номи коллекция номи билан устма-уст тушадиган конструктор функциясидан фойдаланасиз. Ушбу функция унга узатилган элементлардан коллекцияларни «кўради». Қуйидаги мисолда CourseList(), конструкторга олтита элемент узатилади ва у ушбу элементлардан таркиб топган ичма-ич жойлашган жадвални қайтаради:
DECLARE
my_courses CourseList;
BEGIN
my_courses := CourseList('Econ 2010', 'Acct 3401', 'Mgmt 3100',
'PoSc 3141', 'Mktg 3312', 'Engl 2005');
...
END;

Қуйидаги мисолда ProjectList(), конструкторга учта объект узатилади:


DECLARE
accounting_projects ProjectList;
BEGIN
accounting_projects :=
ProjectList(Project(1, 'Design New Expense Report', 3250),
Project(2, 'Outsource Payroll', 12350),
Project(3, 'Audit Accounts Payable', 1425));
...
END;

Бутун массивни инициализация қилиш зарурияти йуқ. Масалан, агар массивнинг максимал ўлчови 50 тенг бўлса, сиз бир нечта 50-дан ошмаган элементларни конструкторга узатишингиз мумкин. Агар сиз NOT NULL чеклагичини қўймаган бўлсангиз ёки элемент учун ёзув турини аниқлаган бўлсангиз, бўш элементни конструкторга узатишингиз мумкин:


BEGIN
my_courses := CourseList('Math 3010', NULL, 'Stat 3202', ...);

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


DECLARE
my_courses CourseList :=
CourseList('Art 1111', 'Hist 3100', 'Engl 2005', ...);

Агар сиз конструкторни аргументсиз чақирсангиз, сиз null бўлмаган бўш коллекцияни ҳосил қиласиз:


DECLARE
TYPE Clientele IS VARRAY(100) OF Customer;
vips Clientele := Clientele(); -- бўш массивни инициализация қилиш
BEGIN
IF vips IS NOT NULL THEN --шарт TRUE қайтаради
...
END IF;
END;

PL/SQL (индекслаштирилган жадваллардан ташқари) конструкторни ошкормас тарзда конструкторни ҳеч қачон чақирмайди, шу сабабли уни ошкор тарзда чақиришингиз шарт. Функцияни чақириш қаерда рухсат этилган бўлса, ўша жойда конструкторни ҳам чақириш рухсат этилган. Булар SELECT, VALUES ва SET жумлаларни ўз ичига олади.


Қуйидаги мисолда, сиз Student объектини sophomores объектли жадвалга киритасиз. CourseList() жадвал конструктори courses атрибутига қиймат киритади.
BEGIN
INSERT INTO sophomores
VALUES (Student(5035, 'Janet Alvarez', '122 Broad St', 'FT',
CourseList('Econ 2010', 'Acct 3401', 'Mgmt 3100', ...)));
...

Охирги мисолда берилганлар базасидаги department жадвалига қатор киритилади. ProjectList() массив конструктори projects устунига қиймат киритади


BEGIN
INSERT INTO department
VALUES(60, 'Security', 750400,
ProjectList(Project(1, 'Issue New Employee Badges', 9500),
Project(2, 'Find Missing IC Chips', 2750),
Project(3, 'Inspect Emergency Exits', 1900)));
...

Download 0.95 Mb.

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




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