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


Хавола осилишини текшириш


Download 0.95 Mb.
bet55/58
Sana28.12.2022
Hajmi0.95 Mb.
#1011518
1   ...   50   51   52   53   54   55   56   57   58
Bog'liq
PL-SQL Маъруза матни

Хавола осилишини текшириш


Агарда ref кўрсатиб турган объект йўқотилса ref осилган ҳолатда (мавжуд бўлмаган объектни кўрсатиб) қолади. Ушбу шартни текшириш учун IS DANGLING SQL предикатидан фойдаланишингиз мумкин:
BEGIN
UPDATE department SET manager = NULL WHERE manager IS DANGLING;

DEREF операторидан фойдаланиш


Refs кўрсатаётган объект қийматларини ўқиб олиш учун DEREF операторидан фойдаланишингиз мумкин. in a SQL statement. (DEREF is short for dereference. When you dereference a pointer, you get the value to which it points.) DEREF аргумент сифатида объектга ҳаволани қабул қилиб, сўнг ҳавола этилаётган объект қийматини қайтаради.
DECLARE
p1 Person;
p_ref REF Person;
name VARCHAR2(15);
BEGIN
...
/* Фараз қиламиз p_ref объектли жадвалда сақланаётган объектга ҳаволасини сақлайди*/
SELECT DEREF(p_ref) INTO p1 FROM dual;
name := p1.last_name;

CREATE TYPE PersonRef AS OBJECT (p_ref REF Person)


/
DECLARE
name VARCHAR2(15);
pr_ref REF PersonRef;
pr PersonRef;
p Person;
BEGIN
...
/* Фараз қиламиз pr_ref тўғри ҳаволадан тиркиб топган. */
SELECT DEREF(pr_ref) INTO pr FROM dual;
SELECT DEREF(pr.p_ref) INTO p FROM dual;
name := p.last_name;
...
END
/
Қуйидаги мисол DEREF операторини процедуравий жумлаларда ишлатиш мумкин эмаслигини кўрсатади:
BEGIN
...
p1 := DEREF(p_ref); -- нотўғри

Қуйидаги синтаксис ёзувлар тўғри:


table_alias.object_column.ref_attribute
table_alias.object_column.ref_attribute.attribute
table_alias.ref_column.attribute

Фараз қиламиз Address ва Person, ҳамда persons объектли жадвални ташкил этувчи қуйидаги SQL*Plus скрипти бажарилди.


CREATE TYPE Address AS OBJECT (
street VARCHAR2(35),
city VARCHAR2(15),
state CHAR(2),
zip_code INTEGER)
/
CREATE TYPE Person AS OBJECT (
first_name VARCHAR2(15),
last_name VARCHAR2(15),
birthday DATE,
home_address REF Address, -- бошқа Person объектлари ҳам ишлатади
phone_number VARCHAR2(15))
/
CREATE TABLE persons OF Person
/

Ref турдаги home_address атрибути persons объектли жадвалнинг устунига мос келиб, у бошқа жадвалда сақланаётган Address объектларига ҳаволадан таркиб топган. Жадвални тўлдирганингиздан кейин, сиз қуйида кўрсатилганидек хусусий адресларни сўров қилиб олишингиз мумкин:


DECLARE
addr1 Address,
addr2 Address,
...
BEGIN
SELECT DEREF(home_address) INTO addr1 FROM persons p
WHERE p.last_name = 'Derringer';

Қуйидаги мисолда home_address ref устун орқали street атрибутига мурожаат қилинади. Бу ҳолатда жадвал ҳамроҳи талаб қилинади.


DECLARE
my_street VARCHAR2(25),
...
BEGIN
SELECT p.home_address.street INTO my_street FROM persons p
WHERE p.last_name = 'Lucas';

Download 0.95 Mb.

Do'stlaringiz bilan baham:
1   ...   50   51   52   53   54   55   56   57   58




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