Фараз қиламиз Person объект тури ва persons объектли жадвални ташкил қилувчи қуйидаги SQL*Plus скриптини бажаришга юбордингиз ва ушбу жадвални тўлидириш ниятидасиз:
CREATE TYPE Person AS OBJECT (
first_name VARCHAR2(15),
last_name VARCHAR2(15),
birthday DATE,
home_address Address,
phone_number VARCHAR2(15))
/
CREATE TABLE persons OF Person
/
Қуйидаги сўровости фақат Person объектлари атрибутларидан таркиб топган натижавий қаторлар тўпламини ишлаб чиқади:
BEGIN
INSERT INTO employees -- Person туридаги бошқа объектли жадвал
SELECT * FROM persons p WHERE p.last_name LIKE '%Smith';
Натижавий объектлар тўпламини қайтариш учун VALUE операторидан фойдаланишингиз лозим.
VALUE операторидан фойдаланиш
VALUE оператори объект қийматини қайтаради. VALUE оператори аргумент сифатида корелляцион ўзгарувчини қабул қилади. Биз бу ерда корелляцион ўзгарувчи деганда, қаторли ўзгарувчини ёки объектли жадвалнинг қатори билан боғлиқ бўлган жадвал ҳамроҳини тушунамиз. Масалан Person туридаги натижавий объектлар тўпламини қайтариш учун VALUE операторидан қуйидагича фойдаланинг:
BEGIN
INSERT INTO employees
SELECT VALUE(p) FROM persons p
WHERE p.last_name LIKE '%Smith';
Қуйидаги мисолда Person туридаги махсус объектни қайтариш учун VALUE операторидан фойдаланган:
DECLARE
p1 Person;
p2 Person;
...
BEGIN
SELECT VALUE(p) INTO p1 FROM persons p
WHERE p.last_name = 'Kroll';
p2 := p1;
...
END;
Бу ерда p1 локал Person объектидан таркиб топган бўлиб, охирги номи 'Kroll' бўлган сақланадиган объект нусхасидир ва p2 бошқа локал Person объекти бўлиб p1 объект нусхасидир:
BEGIN
p1.last_name := p1.last_name || 'Jr';
Энди p1 локал Person объектидаги охирги ном 'Kroll Jr' иборат.
REF операторидан фойдаланиш
Refs-ни REF операторидан фойдаланиб очишингиз мумкин, бунда у аргумент сифатида корреляцион ўзгарувчини қабул қилади. Қуйидаги мисол ёрдамида сиз Person объектлари учун битта ёки ундан кўп refs очиб, сўнг уларни person_refs жадвалига ёзиб қўйишингиз мумкин:
BEGIN
INSERT INTO person_refs
SELECT REF(p) FROM persons p
WHERE p.last_name LIKE '%Smith';
Қуйидаги мисолда сиз ref ва атрибутни бир вақтнинг ўзида очишингиз мумкин:
DECLARE
p_ref REF Person;
taxpayer_id VARCHAR2(9);
BEGIN
SELECT REF(p), p.ss_number INTO p_ref, taxpayer_id
FROM persons p
WHERE p.last_name = 'Parker'; -- битта қитор қайтариши лозим
...
END;
Охирги мисолда сиз Person объекти қийматини ўзгартирасиз:
DECLARE
p_ref REF Person;
my_last_name VARCHAR2(15);
...
BEGIN
...
SELECT REF(p) INTO p_ref FROM persons p
WHERE p.last_name = my_last_name;
UPDATE persons p
SET p = Person('Jill', 'Anders', '11-NOV-67', ...)
WHERE REF(p) = p_ref;
END;
Do'stlaringiz bilan baham: |