Основы (асослар)
Коллекция элементларига қиймат бериш
Download 0.95 Mb.
|
PL-SQL Маъруза матни
- Bu sahifa navigatsiya:
- Коллекцияларни яхлит солиштириш
- Коллекцияларни бошқариш
- Ичма-ич жойлашган жадвалга доир мисоллар
Коллекция элементларига қиймат беришКоллекциянинг муайян элементига ифодали қийматни бериш учун қуйидаги синтаксисдан фойдаланинг: Коллекция_номи(индекс) := ифода; Бу ерда ифода коллекция турини тавсифида элемент учун аниқланган турдаги қийматни қайтаради. Агар индекс null ёки бутун турга айлантирилмайдиган бўлса, PL/SQL олдиндан аниқланган VALUE_ERROR номли мустаснони вужудга келтиради. Агар коллекция атомик null бўлса, PL/SQL COLLECTION_IS_NULL номли мустаснони вужудга келтиради. Бир нечта мисоллар келтирамиз: DECLARE TYPE NumList IS TABLE OF INTEGER; nums NumList := NumList(10,20,30); ints NumList; ... BEGIN ... nums(1) := TRUNC(high/low); nums(3) := nums(1); nums(2) := ASCII('B'); nums('A') := 40; --VALUE_ERROR содир бўлади ints(1) := 15; --COLLECTION_IS_NULL содир бўлади END; Коллекцияларни яхлит солиштиришИчма-ич жойлашган жадваллар ва массивлар атомик null бўлиши мумкин, шу сабабли уларни null бўлиш шартига текшириш мумкин: DECLARE TYPE Staff IS TABLE OF Employee; members Staff; BEGIN ... IF members IS NULL THEN ... – шарт TRUE қайтаради; END; Аммо, лекин коллекцияларни тенглик ёки тенгсизликка солишитириб бўлмайди. Масалан, қуйидаги IF шарти нотўғри: DECLARE TYPE Clientele IS TABLE OF Customer; group1 Clientele := Clientele(...); group2 Clientele := Clientele(...); BEGIN ... IF group1 = group2 THEN -- компиляция хатолиги вужудга келади ... END IF; END; Ушбу чегара ошкормас солишитиришлар учун ҳам қўлланилади. Масалан, коллекциялар DISTINCT, GROUP BY, ёки ORDER BY рўйхатида қатнашиши мумкин эмас. Коллекцияларни бошқаришPL/SQL-да коллекциялар қатор қулайликлар туғдиради. Жумладан, дастурингиз коллекцияларни хотирада сақлаш учун SQL фойдаланиб билади. Ичма-ич жойлашган жадвалга доир мисолларФараз қиламиз SQL*Plus, Course, объект турини қуйидагича аниқладингиз: SQL> CREATE TYPE Course AS OBJECT ( 2 course_no NUMBER(4), 3 title VARCHAR2(35), 4 credits NUMBER(1)); Сўнг, Course объектларини ўз ичида сақловчи TABLE туридаги CourseList номли турини аниқладингиз: SQL> CREATE TYPE CourseList AS TABLE OF Course; Ниҳоят, берилганлар базасидаги CourseList турдаги устун қатнашган department жадвали қуйидагича ташкил этилади: SQL> CREATE TABLE department ( 2 name VARCHAR2(20), 3 director VARCHAR2(20), 4 office VARCHAR2(20), 5 courses CourseList) 6 NESTED TABLE courses STORE AS courses_tab; courses устунидаги ҳар бир элемент ичма-ич жойлашган жадвал бўлиб, берилган бўлим тақдим этадиган курсларни сақлайди. NESTED TABLE жумласи орқали department жадвали ичма-ич жойлашган устунга эга эканлиги белгиланади. Ушбу жумла ичма-ич жойлашган жадвал ва берилганларни сақловчи тизим томонидан ишлаб чиқувчи жадвал номини аниқлайди. Энди department жадвалини тўлдиришингиз мумкин: BEGIN INSERT INTO department VALUES('Psychology', 'Irene Friedman', 'Fulton Hall 133', CourseList(Course(1000, 'General Psychology', 5), Course(2100, 'Experimental Psychology', 4), Course(2200, 'Psychological Tests', 3), Course(2250, 'Behavior Modification', 4), Course(3540, 'Groups and Organizations', 3), Course(3552, 'Human Factors in Busines', 4), Course(4210, 'Theories of Learning', 4), Course(4320, 'Cognitive Processes', 4), Course(4410, 'Abnormal Psychology', 4))); INSERT INTO department VALUES('History', 'John Whalen', 'Applegate Hall 142', CourseList(Course(1011, 'History of Europe I', 4), Course(1012, 'History of Europe II', 4), Course(1202, 'American History', 5), Course(2130, 'The Renaissance', 3), Course(2132, 'The Reformation', 3), Course(3105, 'History of Ancient Greece', 4), Course(3321, 'Early Japan', 4), Course(3601, 'Latin America Since 1825', 4), Course(3702, 'Medieval Islamic History', 4))); INSERT INTO department VALUES('English', 'Lynn Saunders', 'Breakstone Hall 205', CourseList(Course(1002, 'Expository Writing', 3), Course(2020, 'Film and Literature', 4), Course(2418, 'Modern Science Fiction', 3), Course(2810, 'Discursive Writing', 4), Course(3010, 'Modern English Grammar', 3), Course(3720, 'Introduction to Shakespeare', 4), Course(3760, 'Modern Drama', 4), Course(3822, 'The Short Story', 4), Course(3870, 'The American Novel', 5))); END; Қуйидаги мисолда, Инглиз бўлими томонидан тақдим этилган курслар янгиланади: DECLARE new_courses CourseList := CourseList(Course(1002, 'Expository Writing', 3), Course(2020, 'Film and Literature', 4), Course(2810, 'Discursive Writing', 4), Course(3010, 'Modern English Grammar', 3), Course(3550, 'Realism and Naturalism', 4), Course(3720, 'Introduction to Shakespeare', 4), Course(3760, 'Modern Drama', 4), Course(3822, 'The Short Story', 4), Course(3870, 'The American Novel', 4), Course(4210, '20th-Century Poetry', 4), Course(4725, 'Advanced Workshop in Poetry', 5)); BEGIN UPDATE department SET courses = new_courses WHERE name = 'English'; END; Қуйидаги мисолда Физиология Бўлими тақдам этган курсларни локал ичма-ич жойлашган жадвалга олиш намойиш этилган. DECLARE psyc_courses CourseList; BEGIN SELECT courses INTO psyc_courses FROM department WHERE name = 'Psychology'; ... END; Download 0.95 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling