Sunteți pe pagina 1din 136

Orientare pe obiecte n ORACLE9i

Baze de date relaionale orientate pe obiecte -

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

Cuprins
Cuprins.........................................................................................2 Schi general.............................................................................3 1. Introducere..............................................................................4
1.1. Obiecte i tipuri obiect Oracle........................................................................................4 1.2. Avantajele utilizrii obiectelor.......................................................................................5 1.3. Modelul relaional orientat pe obiecte............................................................................7

2. Ce aduce nou Oracle9i?........................................................11 3. Componente de ba !n Oracle Ob"ects................................14


3.1. 3.2. 3.3. 3.4. 3.5. 3.". 3.7. Noiuni relaionale orientate pe obiecte........................................................................14 e!inirea tipurilor obiect i colecie.............................................................................1" #ipul de date re!erin..................................................................................................22 e!inirea tabelelor obiect.............................................................................................27 Metode..........................................................................................................................3$ #ipuri colecie...............................................................................................................47 Motenirea tipurilor......................................................................................................5"

4. #estiunea obiectelor !n Oracle..............................................$1


4.1. Modi!icarea dina%ic a tipurilor..................................................................................71 4.2. &li%inarea tipurilor obiect............................................................................................7' 4.3. ependene i tipuri inco%plete...................................................................................7$ 4.4. (rivile)ii a*upra tipurilor obiect i a %etodelor lor......................................................'2 4.5. +tilitare.........................................................................................................................'" 4.". #ipuri )enerice i tranzitorii.........................................................................................'" 4.7. ,tocarea obiectelor.......................................................................................................$4.'. .ndeci..........................................................................................................................$2 4.$. (artiionarea tabelelor care conin obiecte...................................................................$4 4.1-. /uncii i predicate utile.............................................................................................$5

%. &i uali ri obiect.................................................................1'1


5.1. e!inirea vizualizrilor obiect....................................................................................1-2 5.2. +tilizarea vizualizrilor obiect 0n aplicaii.................................................................1-5 5.3. .erar1ii de vizualizri obiect.......................................................................................115 5.4. Modi!icarea vizualizrilor obiect...............................................................................121

(. )arge Ob"ects.......................................................................123 *ibliogra+ie...............................................................................13(

Orientare pe obiecte n Oracle9i

Schi general
1. (rezentarea )eneral a unui *i*te% de )e*tiune a bazelor de date relaionale orentate pe obiecte. 23"45 2. (rincipalele caracteri*tici ale te1nolo)iei obiectuale 2tipuri6 obiecte6 re!erine6 date co%ple7e6 0ncap*ulare6 %otenire6 poli%or!i*%5.23745 3. #e1nici de proiectare ale bazelor de date relaionale orientate obiect. irecii de abordare. 8o%paraie cu %odelul relaional.23'45 4. #ipuri ab*tracte de date. 9e!erine. 8olecii. 23145 5. #e1nici de abordare obiectual a aplicaiilor p*tr:nd %odelul de date relaional. ;izualizri obiect. 23145 ". <e*iunea i %anipularea obiectelor. 23145 7. <e*tiunea datelor ne*tructurate. =ar)e Object*.23145

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

1. Introducere
8o%binarea a dou te1nolo)ii6 te1nolo)ia bazelor de date relaionale *i cea a pro)ra%rii orientate pe obiecte6 a per%i* )enerarea conceptului de ,i*te% de )e*tiune a bazelor de date 9elationale Orientate pe Obiecte 2,<> 9OO ? Object@9elational ataba*e Mana)e%ent ,A*te%* O9 >M,5. Ace*te *i*te%e *e pot realiza !ie prin adu)area de caracteri*tici obiectuale unui *i*te% relaional6 !ie prin adu)area de caracteri*tici relaionale unui *i*te% obiectual. ,copul e*te de a obine un *i*te% care * o!ere at:t *i%plitatea i )eneralitatea %odelului relaional6 c:t i e!iciena i intuititvitatea unui %odel obiectual. #e1nolo)ia relaional a aprut in anii B7- o dat cu lucrrile lui &./.8odd 23245. ,ucce*ul ace*tei te1nolo)ii6 con!ir%at de *ucce*ul *i*te%elor relaionale de pe piaa *o!tCare 2Oracle6 Micro*o!t ,D= ,erver6 .>M >26 ,Aba*e6 .n!or%i76 .n)re*6 MA,D= etc.5 e*te datorat %ai ale* !aptului ca *e bazeaz pe principii *i%ple6 dar ri)uroa*e din punct de vedere %ate%atic i per%ite totui %odelarea datelor co%ple7e. Encep:nd cu ver*iunea ,- Oracle a devenit un *i*te% de )e*tiune a bazelor de date relaional orientat pe obiecte 2S#*./OO5. En Oracle,i caracteri*ticile obiectuale nu %ai reprezint o opiune *eparat ce trebuie activat dup in*talare6 ci !ac parte din produ*ul de baz. +nul dintre principalele %otive pentru care ace*te te1nolo)ii nu au !o*t 0nc !olo*ite pe *car lar) a !o*t lip*a i%ple%entrii unei i%portante caracteri*tici6 %otenirea. Acea*t caracteri*tic e*te o noutate adu* de Oracle9i6 ceea ce !ace ca te1nolo)ia obiectual Oracle * devin %ai puternic.

1.1. Obiecte i tipuri obiect Oracle


#e1nolo)ia obiectual Oracle reprezint un nivel de ab*tractizare con*truit pe*te %odelul relaional deja e7i*tent. (rincipalele *copuri ur%rite 0n crearea ace*tei te1nolo)ii au !o*tF po*ibilitatea crerii de tipuri de!inite de utilizator care * %odeleze c:t %ai !idel obiectele proprii unei aplicaii i care * !ie tratate ca orice tip prede!init 0n cadrul bazei de dateG a*i)urarea unei in!ra*tructuri care * per%it acce*ul obiectual la datele *tocate 0n baza Oracle i %ini%izarea di!erenelor dintre %odelul de date utilizat 0n aplicaii i cel !olo*it 0n baza de dateG a*i)urarea de pac1ete prede!inite pentru prelucrarea noilor tipuri de date 0n aplicaii %ulti%edia6 !inanciare i *paialeG crearea unui cadru pentru e7ten*ibilitatea bazei de date6 a*t!el 0nc:t tipurile de date co%ple7e * poat !i )e*tionate nativ. 8o%itetele de *tandardizare 01SI i ISO au adu)at celui %ai recent *tandard6 S2)3 2cuno*cut i *ub nu%ele S2)9956 caracteri*tici pentru )e*tiunea datelor co%ple7e obiectuale. Ace*te !aciliti i%plic de!inirea de e7ten*ii a*upra tipurilor de date i6 i%plicit6 a*upra tabelelor care *toc1eaz datele de ace*te tipuri. Au !o*t introdu*e *tructuri de control pentru a co%pleta li%bajul S2) din punct de vedere co%putaional. Ace*tea *unt de*tinate crerii6 prelucrrii i intero)rii *tructurilor de date obiectuale ce *unt *tocate per*i*tent 0ntr@o baz de date.

Orientare pe obiecte n Oracle9i

"

#ipurile de date !olo*ite 0n %odelarea bazelor de date care *unt de!inite de *tandardul S2)92 2S2)25 *e nu%e*c tipuri *i%plu *tructurate. #e1nolo)ia obiectual a !o*t i%ple%entat 0n S2)3 prin introducerea tipurilor co%ple7 *tructurate 2tipuri obiect6 re!erin i colecie5 i a tipurilor ne*tructurate )O* 2)arge O*"ects5. Noile tipuri pot !i create !olo*ind orice tip *tructurat *au ne*tructurat6 prede!init *au de!init de utilizator. #ipurile de!inite de utilizator pot !i utilizate 0n aceeai %anier ca i cele prede!inite 2de e7e%plu6 pentru de!inirea coloanelor 0n cadrul tabelelor relaionale5. e!iniia unui a*t!el de tip trebuie * 0ncap*uleze atribute i operaii 0ntr@o *in)ur entitate. En S2)36 un tip de date trebuie de!init prin *peci!icareaF atributelor care reprezint valoarea tipuluiG relaiilor de e)alitate i ordine dintre obiectele de acel tipG operaiilor care 0i de!ine*c co%porta%entul. #ipurile ab*tracte de date pot !i e7tin*e prin inter%ediul *ubtipurilor6 care %otene*c *tructura i co%porta%entul de la *upertip. .n*tanele tipurilor pot !i *tocate per*i*tent 0n baza de date doar prin inter%ediul coloanelor din tabele. Metadatele 2in!or%aiile din dicionarul datelor5 pentru tipurile de!inite de utilizator *unt *tocate 0ntr@o *c1e% care e*te di*ponibil inter!eelor de pro)ra%are e7i*tente 2 S2)6 3)4S2)6 5a6a etc.5. #ipurile obiect Oracle *unt tipuri de date de!inite de utilizator care !ac po*ibil %odelarea unor entiti co%ple7e din lu%ea real6 a*t!el 0nc:t * !ie con*iderate entiti unitare 2obiecte5 0n baza de date. #ipurile i caracteri*ticile obiect a*i)ur %etode e!iciente de or)anizare i acce*are a in!or%aiilor din baza de date. En *patele nivelului obiectual6 0n reprezentarea intern6 in!or%aiile *unt *tocate 0n coloane i tabele. Avantajul e*te c utilizatorul poate lucra cu ace*tea 0n ter%eni de entiti ale lu%ii reale6 !apt ce d %ai %ult *e%ni!icaie datelor. (oate !i abordat at:t varianta relaional de intero)are a tabelelor6 care caracterizeaz o entitate prin valorile atributelor ei6 c:t i varianta obiectual6 care con*ider entitatea ca !iind un obiect unitar. Entr@un *i*te% relaional orientat pe obiecte *unt po*ibile trei %odaliti de abordare a %odelrii bazei de dateF utilizarea 0n paralel a caracteri*ticilor obiectuale i a celor relaionale6 prin crearea de vizualizri obiect a*upra datelor relaionale e7i*tente6 pentru a le reprezenta i acce*a 0n concordan cu un %odel obiectualG abordarea relaional6 prin te1nici cla*ice de proiectare care utilizeaz e7clu*iv tipurile *i%plu *tructurate pentru *tocarea datelorG abordarea orientat pe obiecte6 prin *tocarea datelor 0n cadrul tabelelor obiect unde !iecare linie reprezint un obiect.

1.2. Avanta ele utili!rii obiectelor


#ipul obiect e*te *i%ilar %ecani*%ului de cla* e7i*tent 0n C77 i 5a6a. 8a i cla*ele6 tipurile obiect !aciliteaz proiectarea entitilor i lo)icii unor %odele co%ple7e din lu%ea real6 iar )radul de reutilizare al *tructurilor obiectuale a*i)ur dezvoltarea rapid i e!icient a aplicaiilor de baze de date. .nte)r:nd nativ tipurile obiect 0n baza de date6 *i*te%ul Oracle per%ite dezvoltatorilor de

'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

aplicaii * acce*eze 0n %od direct *tructurile de date utilizate. Nu e*te nece*ar un nivel inter%ediar de a*ociere 0ntre obiectele client4ser6er i coloanele *au tabelele bazei de date relaionale. Ab*tractizarea obiectelor i 0ncap*ularea co%porta%entului ace*tora !ac aplicaiile uor de 0nele* i de 0ntreinut6 ace*tea r*punz:nd 0n %od e!icient la %odi!icri *au e7tinderi ulterioare.

#ncapsularea operaiilor i a datelor


#abelele bazei nu pot conine dec:t date. Obiectele !ac po*ibil *tocarea operaiilor care pot !i e7ecutate a*upra datelor re*pective. Encap*ularea per%ite li%itarea i controlul acce*ului la un obiect prin inter%ediul %etodelor de!inite de tipul obiectului re*pectiv. e e7e%plu6 0ntr@o aplicaie de )e*tiune a operelor de art dintr@un %uzeu6 un tip obiect core*punztor entitii galerie poate include o %etod de 0n*u%are a valorilor tuturor operelor de art e7pu*e 0n cadrul acelei )alerii. +n tip obiect a*ociat entitii opera poate de!ini %etode pentru obinerea titlului6 a nu%elui arti*tului core*punztor6 a di%en*iunilor ace*teia *au pentru )enerarea unui raport al *ur*elor bibilo)ra!ice care au %enionat@o.

$%iciena
Entr@un tip obiect6 %etodele *unt *tocate 0%preun cu datele6 !iind di*ponibile oricrei aplicaii care trebuie * le utilizeze. ezvoltatorii pot bene!icia de !uncionalitatea tipurilor6 deja i%ple%entat la nivelul bazei de date. En ace*t !el nu e*te nece*ar crearea de *tructuri *i%ilare 0n !iecare %odul al aplicaiei. Mai %ulte obiecte 0nrudite pot !i 0ncrcate i prelucrate ca un 0ntre). O *in)ur cerere ctre ser6er pentru 0ncrcarea unui obiect poate returna i alte obiecte care *unt le)ate de ace*ta prin re!erine obiect. e e7e%plu6 *e *electeaz un obiect galerie i *e invoc %etoda de obinere a nu%elui ace*teia6 a cldirii din care !ace parte i a %ai %ultor co%ponente ale obiectului adresa core*punztor. #oate ace*te in!or%aii *unt obinute printr@o *in)ur tran*%i*ie de la ser6er8ul de baze de date ctre %aina client.

&odaliti de repre!entare a relaiilor de inclu!iune


Entr@un *i*te% relaional e*te di!icil reprezentarea relaiilor co%ple7e de tip Hparte dinI 2incluziune5. e e7e%plu6 un pi*ton i un %otor au acelai *tatut 0ntr@un tabel relaional de produ*e. (entru a reprezenta pi*toanele ca !c:nd parte din %otoare6 trebuie creat o *c1e% relativ co%plicat conin:nd tabele av:nd con*tr:n)eri de inte)ritate re!erenial. (e de alt parte6 tipurile obiect con*tituie o %odalitate *i%pl pentru de*crierea relaiilor de ace*t tip. +n obiect poate avea alte obiecte ca atribute6 iar atributele obiect pot avea la r:ndul lor atribute de tip obiect. En ace*t !el6 *e poate crea o li*t ierar1ic de pri prin *i%pla 0ntreptrundere a tipurilor obiect.

&odaliti de captare a proprietilor de integritate a datelor


#ipurile obiect per%it captarea unor proprieti *peci!ice ale unei entiti cu% ar !i !aptul c atributele *ale !or%eaz un 0ntre). e e7e%plu6 o adre* trebuie * conin *trada6 nu%rul6 oraul6 judeul6 codul potal i ara. ac lip*ete unul dintre ace*te ele%ente6 atunci adre*a e*te inco%plet. ,pre deo*ebire de un tip obiect6 un tabel relaional nu poate i%ple%enta la nivel de baz de date !aptul c %ai %ulte coloane ale unui tabel !or%eaz 0%preun un 0ntre).

Orientare pe obiecte n Oracle9i

1.3. &odelul relaional orientat pe obiecte


,i*te%ul Oracle i%ple%enteaz te1nolo)ia obiectual ca o e7ten*ie a %odelului relaional. .nter!aa obiectual *uport !uncionalitatea *tandard pentru date relaionaleF intero)ri6 per%anentizare6 ar1ivare i recuperare de date6 conectivitate *calabil6 blocare la nivel de linie6 con*i*ten la citire6 partiionare de tabele6 cereri paralelizate6 de!inirea de )rupri6 indeci *au *inoni%e6 e7portJi%port de date6 0ncrcare de date etc. S2) i inter!eele de pro)ra%are ale *i*te%ului Oracle 23)4S2)6 5a6a6 OCI6 3ro9C4C776 OO4O5 au !o*t e7tin*e pentru a prelucra obiectele. 9ezultatul e*te un %odel relaional orientat pe obiecte6 care o!er o inter!a obiectual e!icient i intuitiv6 p*tr:nd concurena i )eneralitatea dintr@o baz de date relaional.

&otenirea tipurilor
,i*te%ul Oracle *uport %otenirea *i%pl. intr@un tip *e pot deriva unul *au %ai %ulte *ubtipuri. Motenirea *i%pl a tipurilor pre*upune crearea ierar1iilor de tipuri6 prin de!inirea de niveluri *ucce*ive de *ubtipuri *pecializate care deriv dintr@un tip HprinteI co%un. Nu%rul de niveluri dintr@o ierar1ie e*te neli%itat. ,ubtipurile derivate %otene*c proprietile tipului obiect HprinteI pe care 0l e7tind. e e7e%plu6 din tipul obiect )eneral organi ator *e pot deriva tipuri *pecializate de or)anizatori6 organi ator:particular i organi ator:de:stat6 !iecare cu atribute i %etode *peci!ice. #ipurile *pecializate pot adau)a noi atribute *au rede!ini %etode %otenite de la tipul HprinteI. .erar1ia de tipuri rezultat !urnizeaz un nivel ridicat de ab*tractizare pentru )e*tiunea co%ple7itii unui %odel de date. En *i*te%ul Oracle6 %otenirea la nivel de client *e realizeaz prin inte)rarea de cod C77 i 5a6a 0n baza de date. (entru C77 *e !olo*ete Ob"ect ;odelling Option din Oracle .esigner 0n vederea producerii de co%enzi ).. i de cod C77 bazat pe dia)ra%ele de cla*e *peci!icate 0n <;) 2<ni6ersal ;odelling )anguage5. (entru 5a6a *e !olo*ete caracteri*tica custom datum din dri6er@ul Oracle 5.*C. Metoda de %otenire la nivel de ser6er e*te a*i)urat 0n 5a6a de ctre Oracle 9i5&;.

&odi%icarea dina(ic a tipurilor


En Oracle9i6 %odi!icarea unui tip de!init de utilizator 2 t=pe e6olution5 *e poate !ace dina%ic i cu propa)area *c1i%brilor. Obiectele care depind de tipul %odi!icat *unt validate utiliz:nd co%anda iniial de creare. ac tipul re*pectiv *au oricare dintre tipurile dependente de el nu trec de validrile re*pective6 atunci co%anda de %odi!icare e*te abandonat. En ace*t caz6 nu e*te creat noua ver*iune de tip i *c1e%a de dependen a obiectelor r%:ne ne*c1i%bat. Metadatele a*ociate tabelelor i coloanelor care utilizeaz un tip %odi!icat *unt actualizate 0n concordan cu noua de!iniie a tipului6 a*t!el 0nc:t noile obiecte * !ie *tocate 0n noul !or%at. atele e7i*tente pot !i convertite la noul !or%at *i%ultan *au treptat6 pe %*ur ce *unt %odi!icate. &le *unt prezentate 0n !or%atul noii de!iniii a tipului6 c1iar dac *unt 0nc *tocate 0n vec1iul !or%at.

, *i!uali!ri obiect

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

O vizualizare obiect e*te o %odalitate de a acce*a datele relaionale utiliz:nd %etode caracteri*tice %odelului obiectual. ;izualizrile obiect *unt tabele obiect virtuale. Ace*te obiecte ale *c1e%ei dau po*ibilitatea de a dezvolta aplicaii orientate pe obiecte !r a *c1i%ba *c1e%a relaional iniial. (e l:n) *tocarea nativ a datelor obiectuale pe ser6er6 *i*te%ul Oracle per%ite crearea unei ab*tractizri obiectuale a datelor relaionale e7i*tente6 prin %ecani*%ul vizualizrilor obiect. =iniile obiect care aparin unei vizualizri obiect pot !i acce*ate 0n aceeai %anier ca i liniile dintr@un tabel obiect. (ot !i create vizualizri obiect core*punztoare tipurilor de!inite de utilizator6 care *e re!er la datele *tocate 0n *c1e%a relaional. ;izualizrile obiect per%it valori!icarea poli%or!i*%ului i%ple%entat 0n cadrul ierar1iilor de tipuri. O e7pre*ie poli%or!ic poate lua o valoare de tipul declarat al e7pre*iei *au de orice *ubtip al tipului re*pectiv. ,e poate con*trui o ierar1ie de vizualizri obiect care o)lindete o parte *au 0ntrea)a *tructur a unei ierar1ii de tipuri. En ace*t conte7t6 *e pot e7ecuta cereri a*upra unei vizualizri din ierar1ie pentru a acce*a date6 la nivelul de *pecializare dorit. e a*e%enea6 dac *e intero)1eaz o vizualizare obiect care are *ubvizualizri6 *e obin date poli%or!ice 2linii obiect din vizualizarea intero)at i din *ubvizualizrile *ale5.

$+tensii obiectuale SQL


(entru *uportul noilor caracteri*tici relaionale orientate pe obiecte6 au !o*t adu)ate e7ten*ii ale li%bajului de de!inire a datelorF pentru crearea6 %odi!icarea i *upri%area tipurilor obiect 2 C/>0?> ?@3>- C/>0?> ?@3> *O.@- 0)?>/ ?@3>- ./O3 ?@3>5G pentru *tocarea tipurilor obiect 0n tabeleG pentru crearea6 %odi!icarea i ter)erea vizualizrilor obiect 2 C/>0?> &I>AB0S O*5>C?5. e a*e%enea6 pentru a !acilita lucrul cu tipuri obiect6 re!erine i colecii au !o*t create e7ten*ii *peci!ice ale li%bajului de prelucrare i intero)are a datelor.

$+tensii obiectuale PL/SQL


3)4S2) e*te li%bajul de pro)ra%are al bazei de date Oracle6 *tr:n* inte)rat cu S2). Ace*ta opereaz at:t cu tipuri prede!inite6 c:t i cu tipuri de!inite de utilizator. ezvoltatorii pot !olo*i 3)4S2) pentru a i%ple%enta lo)ica aplicaiei prin inter%ediul operaiilor a*ociate tipurilor obiect. A*t!el6 e7ecuia *e realizeaz pe ser6er@ul de baze de date obin:nd un plu* de e!icien.

Suport a!a pentru obiectele Oracle


Oracle 5a6a &irtual ;achine e*te *tr:n* inte)rat cu *i*te%ul Oracle i *uport acce*ul la obiectele Oracle prin S2) dina%ic6 utiliz:nd e7ten*iile obiect 5a6a .atabase Conecti6it= 25.*C56 *au prin S2) *tatic6 utiliz:nd S2)5. ,i%ilar li%bajului 3)4S2)6 5a6a per%ite i%ple%entarea lo)icii aplicaiilor utiliz:nd operaii proprii tipurilor obiect. ;er*iunea Oracle9i per%ite crearea de tipuri S2) a*ociate unor cla*e 5a6a e7i*tente6 a*i)ur:nd *tocare per*i*tent a obiectelor 5a6a.

Orientare pe obiecte n Oracle9i

-ranslatorul de tipuri obiect


#ran*latorul de tipuri obiect 2 Oracle ?=pe ?ranslator5 per%ite crearea de i%a)ini 2 mapping5 ale tipurilor obiect pe %aina client. +tiliz:nd in!or%aiile din dicionarul datelor - *e pot )enera !iiere de tip header ce conin cla*e 5a6a- *tructuri i indicatori C. /iierele )enerate pot !i utilizate de pro)ra%e 0n li%baj %ain pentru acce*ul tran*parent la obiectele bazei de date.

.roceduri e+terne
/unciile6 procedurile *au %etodele unui tip obiect pot !i i%ple%entate 0n li%bajul procedural 3)4S2)6 dar i 0n 5a6a *au C ca *ubpro)ra%e e7terne. (rocedurile e7terne *unt potrivite pentru *arcini care pot !i e7ecutate %ai rapid *au i%ple%entate %ai uor 0n alt li%baj de pro)ra%are. e e7e%plu6 li%bajul C e*te e!icient la calcule 0n dubl precizie6 a*t!el 0nc:t anu%ite operaii care nece*it vitez de calcul6 precu% tran*!or%area /ourier *au conver*ia !or%atului unei i%a)ini6 *unt %ai e!iciente 0n pro)ra%e C. (rocedurile e7terne *unt e7ecutate 0n condiii de %a7i% *ecuritate 0n a!ara adre*elor ser6er@ului Oracle. #ipul )eneric e*te prede!init i per%ite unei proceduri * lucreze cu date de orice tip6 prede!init *au de!init de utilizator. ,e pot *crie proceduri e7terne )enerice care * declare unul *au %ai %uli para%etri de tip )eneric.

&e(oria virtual client


,i*te%ul Oracle rezerv un *paiu de %e%orie virtual pentru a a*i)ura acce*ul e!icient la obiectele *tocate per*i*tent 0n baza de date. En ace*t *paiu *e pot *toca copii ale obiectelor *tocate 0n baza de date. A*t!el6 aplicaiile pot con*ulta in!or%aiile la o vitez *uperioar. Orice %odi!icri !cute a*upra obiectelor din %e%oria virtual pot !i per%anentizate 0n baza de date utiliz:nd e7ten*iile obiectuale ale inter!eei de pro)ra%are OCI.

$+tensii obiectuale Oracle Call Inter"ace


OCI 2Oracle Call Inter+ace5 a*i)ur o inter!a pentru pro)ra%area de aplicaii adaptat pentru dezvoltatorii i utilitarele care !olo*e*c po*ibilitile obiectuale ale *i*te%ului. &*te !urnizat un %ediu de rulare cu !uncii de conectare la ser6er8ul Oracle i de control al tranzaciilor care acce*eaz obiectele de pe ser6er. ezvoltatorii de aplicaii pot acce*a i prelucra obiectele din %e%oria virtual client 0n %od navi)aional 2traver*:nd un )ra! de obiecte interconectate5 *au 0n %od a*ociativ 2*peci!ic:nd natura datelor printr@o co%and );. declarativ5. e a*e%enea6 OCI a*i)ur !uncii pentru acce*area %etadatelor re!eritoare la tipurile obiect de!inite pe ser6er6 e7i*tente la %o%entul rulrii. Ace*t *et de !uncii !aciliteaz acce*ul dina%ic la in!or%aiile de*pre obiecte i la datele obiectuale *tocate 0n baza de date.

$+tensii obiectuale Pro#C/C//


(reco%pilatorul 3ro9C4C77 e*te o inter!a de pro)ra%are care per%ite inte)rarea de co%enzi S2) 0n pro)ra%e C *au C776 o!erind un nivel %ai 0nalt de ab*tractizare dec:t OCI. 8u re!erire la te1nolo)ia obiectual6 3ro9C are ur%toarele caracteri*ticiF per%ite dezvoltatorilor de aplicaii * !olo*ea*c %e%oria virtual obiect de pe %aina client i utilitarul Oracle ?=pe ?ranslatorG *uport utilizarea variabilelor de le)tur C pentru tipurile obiectG a*i)ur o *inta7 *i%pli!icat pentru alocarea i eliberarea *paiului de *tocare a obiectelor i acce*area lor prin co%enzi );. *au prin inter!aa navi)aional.

11

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

3ro9C aduce dezvoltatorilor de aplicaii %ultiple bene!icii. intre ace*tea *e re%arcF veri!icarea variabilelor de le)tur de pe %aina client relativ la *c1e%a de pe ser6er6 la %o%entul co%pilriiG a*ocierea auto%at a datelor obiectuale dintr@un ser6er Oracle cu variabilele de le)tur de pe %aina clientG %odaliti *i%ple de )e*tiune i prelucrare a obiectelor bazei de date 0n cadrul unui proce* client.

$+tensii obiectuale Oracle Ob$ect% "or OLE


OO4O 2Oracle Ob"ects +or O)>5 e*te un *et de inter!eeJobiecte CO; 0utomation pentru conectarea la ser6er@ele Oracle6 e7ecutarea de cereri i prelucrarea rezultatelor. .nter!eele de auto%atizare 0n OO4O a*i)ur un acce* *i%plu i e!icient la caracteri*ticile Oracle9i. &le pot !i utilizate practic din orice li%baj de pro)ra%are *au 0n !iierele script care *uport te1nolo)ia ;icroso+t CO; 0utomation 2&isual *asic- &isual C77- &*0 !n >Ccel- &*Script i 5a6aScript 0n IIS 0cti6eSer6er3ages5.

Orientare pe obiecte n Oracle9i

11

2. Ce aduce nou Oracle9i2


#e1nolo)ia obiectual reprezint una dintre principalele preocupri ale proiectanilor i dezvoltatorilor *i*te%ului de )e*tiune a bazelor de date Oracle. Encep:nd cu ver*iunea Oracle9i6 au !o*t introdu*e caracteri*tici i%portante care dau !or ace*tei te1nolo)ii6 0ncuraj:nd i !acilit:nd abordarea obiectual a aplicaiilor de baze de date. En continuare *unt prezentate principalele caracteri*tici relative la orientarea pe obiecte adu*e de ver*iunea Oracle9i.

Sinoni(e de tipuri
Encep:nd cu ver*iunea Oracle9i6 *e pot de!ini *inoni%e pentru tipurile de!inite de utilizator. Ace*tea o!er aceleai avantaje ca i *inoni%ele a*ociate celorlalte obiecte ale unei *c1e%e6 i anu%e *i%plitatea i !le7ibilitatea re!eririi unui tip obiect. A*t!el6 aplicaiile care utilizeaz *inoni%e de tipuri pot !unciona cu %odi!icri %ini%e 0n di!erite *c1e%e de obiecte.

Constructori de%inii de utili!ator


/unciile con*tructor per%it iniializarea in*tanelor obiect. 8on*tructorii de!inii de utilizator !aciliteaz %odi!icarea tipurilor. e!inirea %ai %ultor con*tructori 0nltur nece*itatea *c1i%brii tuturor liniilor de cod e7i*tente care apeleaz con*tructori6 doar pentru a re!lecta %odi!icarea de *tructur re*pectiv 2de e7e%plu6 in*erarea unui nou atribut5.

&otenirea tipurilor SQL


Modelarea c:t %ai !idel a entitilor lu%ii reale i a relaiilor dintre ace*tea reprezint pri%ul pa* 0n valori!icarea caracteri*ticilor obiectuale. ,e pot de!ini ver*iuni *pecializate de tipuri obiect *ub !or%a *ubtipurilor. Ace*tea pot !i or)anizate 0ntr@o ierar1ie de tipuri ce are la baz un tip co%un 2rdcin5. En cadrul ierar1iei *e poate particulariza i%ple%entarea i e7ecutarea %etodelor6 0n !uncie de nivelul de ab*tractizare al !iecrui tip.

Ierarhii de vi!uali!ri obiect


,e pot crea ierar1ii de vizualizri obiect6 bazate pe o parte *au pe toate tipurile dintr@o ierar1ie de tipuri. .erar1iile de vizualizri obiect *i%pli!ic e7tra)erea obiectelor de un anu%it tip 2i eventual de *ubtipuri ale lui5 0n cadrul cererilor i a operaiilor );.. e a*e%enea6 ace*te ierar1ii per%it trecerea la un %odel obiectual co%ple76 p*tr:nd *tructura relaional e7i*tent.

&odi%icarea dina(ic a tipurilor


#ipurile S2) de!inite de utilizator pot !i %odi!icate dina%ic 2 t=pe e6olution5. En ver*iunile anterioare6 pentru %odi!icarea unui tip era nece*ar e7portarea tuturor datelor dependente6 recrearea tipului6 i%portarea datelor dependente i revalidarea tuturor obiectelor dependente invalidate de ter)erea te%porar a tipului. En Oracle9i6 toate obiectele *c1e%ei care *unt dependente de tipul %odi!icat *unt revalidate auto%at la pri%a re!erire6 utiliz:nd noua de!iniie a tipului re*pectiv.

12

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

3uncii agregat de%inite de utili!ator


/unciile a)re)at prede!inite nu *e pot !olo*i dec:t 0n lucrul cu date *calare. Encep:nd cu ver*iunea Oracle9i e*te per%i* crearea de i%ple%entri proprii ale !unciilor a)re)at e7i*tente i de!inirea !unciilor a)re)at co%plet noi6 a*t!el 0nc:t ace*tea * poat !i !olo*ite 0%preun cu tipurile de!inite de utilizator.

-ipuri de date generice i tran!itorii


(rocedurile e7terne pot accepta para%etri de tip )eneric care * conin valori de orice tip *calar *au de!init de utilizator. En ace*t !el6 nu e*te nece*ar * *e i%ple%enteze %ai %ulte ver*iuni ale aceleiai proceduri e7terne doar pentru a putea accepta %ai %ulte tipuri de date.

Indeci ba!ai pe %uncii


.ndecii bazai pe !uncii pot !olo*i %etode ale tipurilor obiect. Aceti indeci apar atunci c:nd e*te !olo*it !recvent o anu%it condiie care !olo*ete o %etod a unui tip obiect. (entru a avea *en* crearea ace*tui tip de inde76 %etoda re*pectiv trebuie * !ie deter%ini*t6 0n *en*ul c pentru aceleai ar)u%ente6 ea trebuie * !urnizeze acelai rezultat6 0n orice %o%ent.

Colecii pe (ai (ulte niveluri


8oleciile 2vectori i tablouri i%bricate5 pot conine ele%ente care *unt la r:ndul lor colecii *au obiecte av:nd atribute de tip colecie. En ace*t !el apar *tructuri co%ple7e de date reprezentate prin colecii pe %ai %ulte niveluri care pot %odela 0n %od opti% anu%ite entiti din lu%ea real.

Oracle C// Call Inter"ace


Noua inter!a Oracle core*punztoare li%bajului C77 2OCCI56 con*truit pe baza Oracle Call Inter+ace 2OCI56 per%ite utilizarea caracteri*ticilor obiectuale6 a cla*elor native i a %etodelor li%bajului C77 cu *copul de a acce*a in!or%aiile din baza de date Oracle. OCCI e*te o colecie de cla*e C776 care per%it unui pro)ra% C77 * *e conecteze la o baz de date Oracle6 * e7ecute co%enzi S2)6 * obin rezultatul unei cereri6 * e7ecute proceduri *tocate 0n baza de date *au * acce*eze %etadate relativ la obiectele unei *c1e%e.

Stocarea persistent a obiectelor a!a


(entru a a*i)ura *tocarea per*i*tent a obiectelor 5a6a6 e*te po*ibil crearea de tipuri S2) a*ociate unor cla*e 5a6a e7i*tente. Ace*tea *e nu%e*c tipuri S2) ale li%bajului 5a6a *au tipuri S2)5.

Lar&e Ob$ect%
,i*te%ul Oracle9i aduce 0%buntiri *e%ni!icative tipurilor de date )O* i %odalitilor de utilizare a ace*tora. (entru a a*i*ta utilizatorii 0n proce*ul de %i)rare de la datele *tocate 0n !or%at )O1# la cele 0n !or%at )O*6 au !o*t introdu*e o *erie de !aciliti. Au !o*t e7tin*e co%enzile 0)?>/ ?0*)> i 0)?>/ I1.>D6 tranziia av:nd i%plicaii %ini%e a*upra datelor *tocate 0n tabele. Aplicaiile care utilizeaz coloane %i)rate nece*it %odi!icri %inore. Majoritatea *ubpro)ra%elor prede!inite ce acioneaz a*upra obiectelor de tip )O1# au !o*t e7tin*e * accepte tipul )O*.

Orientare pe obiecte n Oracle9i

13

En Oracle9i6 obiectele )O* per*i*tente *e pot acce*a !olo*ind !unciile i operatorii *tandard core*punztori tipului &0/CE0/2 2S<*S?/6 I1S?/ etc.5. Aceti operatori *unt reco%andai %ai ale* atunci c:nd valorile )O* *unt de di%en*iune redu* 20ntre 1- i 1-- F*5. .nter!eele OCCI6 5.*C i O)> .* au !o*t 0%buntite a*t!el 0nc:t * *uporte acce*ul i prelucrarea datelor de tip )O*. En ceea ce privete pac1etul prede!init .*;S:)O*6 au !o*t introdu*e proceduri care per%it 0ncrcarea di!ereniat a obiectelor de tip *)O*6 re*pectiv C)O* din !iiere ale *i*te%ului de operare6 care *unt acce*ate !olo*ind tipul *GI)>. e a*e%enea6 *i*te%ul Oracle9i eli%in %ulte re*tricii a*upra tipurilor )O*6 e7i*tente 0n ver*iunile precedente

14

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

3. Co(ponente de ba! 4n Oracle Ob$ect%


Abordarea relaional orientat pe obiecte introduce noi !uncionaliti6 concepte i re*ur*e. En cele ce ur%eaz *e vor prezenta ace*te noi concepte6 0%preun cu %odalitile de i%ple%entare di*ponibile 0n Oracle9i.

3.1. 5oiuni relaionale orientate pe obiecte


#e1nolo)ia obiectual Oracle i%plic e7i*tena unor te1nici *peci!ice pentru de!inirea6 prelucrarea i )e*tiunea tipurilor obiect6 re!erin i a coleciilor. e a*e%enea6 *unt nece*are %ijloace de i%ple%entare pentru e7tinderea tipurilor i or)anizarea ace*tora 0n ierar1ii.

-ipuri obiect
+n tip obiect e*te o ab*tractizare a unei entiti din lu%ea real. &l reprezint un tip de date co%ple7 *tructurat6 *tocat 0ntr@o *c1e% a bazei de date. #ipurile obiect au ur%toarele co%ponenteF un nu%e6 care identi!ic 0n %od unic tipul re*pectiv 0n cadrul *c1e%eiG atribute6 care %odeleaz *tructura i *tarea entitii reprezentateG %etode6 care i%ple%enteaz co%porta%entul entitii re*pective. Atributele conin in!or%aii re!eritoare la caracteri*ticile obiectelor de tipul re*pectiv 2de e7e%plu6 un tip obiect opera poate avea atributele nume6 tip- autor- data:achi itiei etc.5. #ipul de date declarat al unui atribut poate !i tot un tip obiect. Atributele in*tanei unui obiect con*tituie datele obiectului re*pectiv. Metodele *unt proceduri *au !uncii care i%ple%enteaz co%porta%entul obiectelor6 per%i:nd aplicaiilor * e7ecute operaiile nece*are a*upra atributelor unui obiect. ,pre deo*ebire de atribute6 %etodele nu *unt obli)atorii. #ipurile obiect *e pot utiliza 0n acelai !el 0n care *unt utilizate i tipurile de date *i%plu *tructurate 21<;*>/6 &0/CE0/26 .0?> etc.5. e e7e%plu6 ace*te tipuri pot !i !olo*ite pentru de!inirea coloanelor 0ntr@un tabel relaional *au pentru declararea de variabile. O valoare de tip obiect *e nu%ete in*tan a acelui tip *au6 *i%plu6 obiect. &7i*t c:teva di!erene 0ntre tipurile obiect i celelalte tipuri de date *peci!ice unei baze relaionaleF nu e7i*t tipuri obiect prede!inite inclu*e la in*talarea bazei6 ele put:nd !i de!inite de ctre utilizatoriG tipurile obiect au o *tructur co%ple76 neuni!or% 2atribute6 %etode5G tipurile obiect *unt %ai puin )enerice dec:t tipurile native6 ace*ta !iind unul dintre %arile avantaje. #ipurile obiect pot !i i%a)inate ca un plan de *tructur6 iar obiectul ca !iind produ*ul concret con*truit con!or% planului. Ace*te tipuri *unt obiecte per*i*tente ale *c1e%ei bazei de date6 *ubiect al acelorai cate)orii de controale ad%ini*trative ca i celelalte obiecte ale *c1e%ei.

Orientare pe obiecte n Oracle9i

1"

(rin crearea tipurilor obiect *e poate %odela *tructura unor entiti din lu%ea real6 cu care pro)ra%ele de aplicaii * lucreze 0n %od direct. Acea*t abordare per%ite )e*tiunea *i%pli!icat i intuitiv a datelor. O *c1e% relaional6 cu tabele i coloane de tipuri native6 proiecteaz %odelul 0ntr@un cadru bidi%en*ional. #ipurile obiect per%it captarea relaiilor *tructurale interne dintre obiecte i atribute. 8u ajutorul tipurilor obiect *e pot *toca pri 0nrudite de date6 0%preun cu operaiile *peci!ice ace*tora. En cadrul aplicaiilor6 obiectele pot !i captate i prelucrate ca nite uniti ato%ice.

&otenirea tipurilor
+n tip obiect poate !i *pecializat prin crearea de *ubtipuri. +n *ubtip adau) unele caracteri*tici care 0l di!ereniaz de tipul iniial i anu%e6 atribute *au %etode adiionale. Operaia de creare a *ubtipurilor *e nu%ete derivare6 iar tipul obiect HprinteI poart nu%ele de *upertip *au )eneralizare a *ubtipului derivat. ,ubtipurile6 !iind ver*iuni *pecializate ale HprinteluiI lor6 conin at:t atributele i %etodele HprinteluiI6 c:t i pe cele de!inite local. ,ubtipurile i *upertipurile *unt conectate prin relaia de %otenire i de!ine*c 0n ace*t !el o ierar1ie de tipuri.

Obiecte
=a iniializarea unei variabile de tip obiect *e creeaz o in*tan a acelui tip *au6 alt!el *pu*6 *e in*taniaz un obiect. +n obiect conine atributele i %etodele de!inite de tipul *u. ,pre deo*ebire de tipul obiect care reprezint *c1ia unui %odel de date6 in*tana e*te o *tructur concret care conine in!or%aii. Obiectele *unt *tocate 0n baza de date. (rin ur%are6 atributele unei in*tane au valori6 iar %etodele ei pot !i apelate 0n concordan cu ace*tea. Obiectele *unt )e*tionate nativ de ctre ser6er@ul de baze de date. #ipurile obiect pot !i !olo*ite ca tipuri de coloane 2pentru *tocarea coloanelor obiect5 *au ca tipuri de tabele obiect 2pentru *tocarea liniilor obiect5. Atunci c:nd *unt !olo*ite pentru coloane obiect6 tipurile obiect *e co%port ca nite do%enii relaionale cla*ice 0n cadrul unor tabele relaionale. En plu*6 !iecare linie obiect are a*ociat un identi!icator unic6 nu%it identi!icator obiect 2 Ob"ect I.enti+ierH6 care poate !i !olo*it pentru re!erirea oricrui obiect *tocat 0ntr@un tabel obiect . Obiectele *unt co%ponente ale *c1e%ei i *unt inte)rate co%plet 0%preun cu celelalte obiecte din cadrul ace*teia. &le pot !i inde7ate i partiionate. e a*e%enea6 cererile care i%plic obiecte pot !i paralelizate i *unt opti%izate de ctre opti%izorul pe baz de co*turi6 care utilizeaz *tati*ticile %eninute de *i*te%. /unda%entate 0n cadrul ser6er@ului de baze de date Oracle6 obiectele *unt )e*tionate la acelai nivel ridicat de !iabilitate6 di*ponibilitate i *calabilitate ca i datele relaionale.

&etode
Metodele *unt !uncii *au proceduri declarate 0n de!iniia unui tip obiect pentru a i%ple%enta un anu%it co%porta%ent. +na dintre principalele utilizri a %etodelor e*te aceea de a a*i)ura acce*ul la date. En ace*t !el e*te !urnizat un control *porit a*upra acce*ului la in!or%aii i un )rad ridicat de *ecuritate. Atunci c:nd *unt de!inite %etode pentru operaiile previzibile a*upra obiectelor6 aplicaiile nu %ai trebuie * i%ple%enteze 0n %od redundant acelai co%porta%ent 0n %ai %ulte %odule6 ci doar * apeleze %etoda core*punztoare unui anu%it obiect. En ace*t !el6 pe l:n) po*ibilitatea reutilizrii

1'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

codului6 *e c:ti) i e!icien deoarece %etodele *e e7ecut direct pe ser6er. ,e pot de!ini %etode pentru co%pararea in*tanelor unui tip obiect 2%etode de co%parare5. (entru e7ecutarea operaiilor care nu !olo*e*c date particulare din obiecte i care *unt )lobale la nivel de tip obiect *e i%ple%enteaz %etode *tatice.

Colecii
(entru %odelarea relaiilor one8to8man=6 *i*te%ul Oracle a*i)ur dou tipuri colecie6 vector i tablou i%bricat. #ipurile colecie pot !i utilizate la !el ca i celelalte tipuri de date pentru a de!ini tipul atributelor6 coloanelor etc. e e7e%plu6 *e poate a*ocia unui obiect de tip t:opera:de:arta un atribut de tip tablou i%bricat care * conin colecia de polie de a*i)urare core*punztoare *au un atribut de tip vector de di%en*iune trei care * conin di%en*iunile obiectului re*pectiv.

-abele obiect
+n tabel obiect e*te un tabel *pecial 0n care !iecare linie reprezint un obiect. Obiectele *tocate trebuie * e7i*te 0n cadrul *c1e%ei curente *au 0ntr@una a*upra creia utilizatorul are privile)iile nece*are. #abelul obiect are o *in)ur coloan de tip obiect. #abelele obiect pot !i privite din dou puncte de vedere di!eriteF obiectual6 ca un tabel cu o *in)ur coloan 0n care !iecare linie e*te o in*tan a tipului obiect a*ociatG relaional6 ca un tabel %ulticoloan 0n care !iecare atribut al tipului a*ociat reprezint o coloan. Obiectele care ocup linii co%plete 0n tabelele obiect *e nu%e*c linii obiect. Obiectele care ocup coloane 0n cadrul tabelelor relaionale *au *unt atribute de tip obiect *e nu%e*c coloane obiect.

-ipul de date re%erin


En %odelul relaional6 relaiile one8to8man= *unt i%ple%entate prin inter%ediul c1eilor e7terne. #ipurile obiect a*i)ur o %odalitate %ai e!icient de a e7pri%a ace*te relaii atunci c:nd obiectul core*punztor cardinalitii one e*te o linie obiect. Mai e7act6 *i*te%ul Oracle a*i)ur un tip de date prede!init 2re!erin5 nu%it />G6 care 0ncap*uleaz re!erinele la liniile obiect de un tip obiect *peci!icat. in per*pectiva %odelrii6 re!erinele !ac po*ibil captarea relaiei dintre dou linii obiect. (entru a con*trui re!erine6 *i*te%ul utilizeaz identi!icatorii obiect. O re!erin poate !i utilizat pentru a con*ulta *au %odi!ica obiectul pe care 0l re!er. e a*e%enea6 o re!erin *e poate !olo*i pentru a obine o copie a obiectului re!erit. ,in)urele *c1i%bri care pot !i !cute a*upra unei valori de tip re!erin *unt de a 0nlocui coninutul coloanei de tipul re*pectiv cu un alt obiect de acelai tip *au cu valoarea null.

3.2. 6e%inirea tipurilor obiect i colecie


(entru crearea tipurilor obiect i a celor colecie *e utilizeaz co%enzile C/>0?> ?@3> i C/>0?> ?@3> *O.@. 8o%anda C/>0?> ?@3> creeaz *peci!icaia unui tip obiect6 S2)56 colecie *au inco%plet. (rin inter%ediul ace*tei co%enzi *e *peci!ic nu%ele tipului6 atributele *ale6 %etodele i alte proprieti *upli%entare. 8o%anda C/>0?> ?@3> *O.@ per%ite i%ple%entarea %etodelor care au !o*t declarate 0n co%anda C/>0?> ?@3>. (rocedeul e*te a*e%ntor crerii pac1etelor 3)4S2). ac *e creeaz un tip obiect pentru care *peci!icaia tipului declar doar atribute6 nu i %etode6 atunci nu %ai e*te nece*ar o co%and C/>0?> ?@3> *O.@. Acelai lucru e*te valabil i la crearea unui tip obiect S2)5- i%ple%entarea tipului !iind *peci!icat de ctre o cla* 5a6a *au de o

Orientare pe obiecte n Oracle9i

1)

*tructur C. En %od i%plicit6 *i*te%ul Oracle de!inete o %etod con*tructor pentru !iecare tip de!init de utilizator. +n con*tructor e*te o !uncie !urnizat de *i*te% care e*te !olo*it 0n co%enzi S2) *au blocuri 3)4S2) pentru a con*trui o in*tan a unui tip obiect. Nu%ele con*tructorului e*te acelai cu nu%ele tipului a*ociat. ,i*te%ul per%ite utilizatorului * de!inea*c propriul con*tructor. (ara%etrii %etodei con*tructor a tipului obiect core*pund atributelor tipului re*pectiv i re*pect ordinea ace*tora din de!iniia tipului. En cazul unui tip colecie6 para%etrii con*tructorului reprezint ele%entele coleciei re*pective. +n tip inco%plet e*te un tip creat 0nainte de a i *e *peci!ica de!iniia6 pentru a putea !i re!erit 0n alte *tructuri. ,e nu%ete inco%plet pentru c are un nu%e6 dar nu are atribute *au %etode. Ace*t tip poate !i re!erit de alte tipuri i e*te !olo*it la de!inirea tipurilor care *e re!er unul pe cellalt 2 cross re+erence5. e re%arcat c e*te obli)atorie *peci!icarea 0n 0ntre)i%e a de!iniiei unui tip6 0nainte de a@l utiliza la crearea unui tabel *au a unei coloane obiect. (entru crearea unui tip obiect *e utilizeaz ur%toarea *inta7 1F CREATE 3OR REPLACE4 T'PE 3schema.4nume:tip 3A(T)ID KC(RRENT*(SER L DE+INERM K KIS I ASM OB ECT L (NDER 3schema.4nume:supertipM 2 Katribut1 tip:de:date1 L spec:metoda1M 3- Katribut2 tip:de:date2 L spec:metoda2B4 5 3 3NOT4 +INAL4 3 3NOT4 INSTANTIABLE4G =a recrearea unui tip6 cu ajutorul clauzei O/ />3)0C>6 *i*te%ul dezactiveaz indecii bazai pe !uncii ce depind de tipul re*pectiv. ac *e o%ite nu%ele *c1e%ei6 *i*te%ul creeaz tipul 0n *c1e%a curent. &ventualele erori aprute la crearea tipului pot !i con*ultate cu ajutorul co%enzii SEOA >//O/S din S2)93lus. 8lauzele re!eritoare la drepturile de invocare 2 0<?EI.5 *peci!ic dac %etodele tipului obiect *e e7ecut cu privile)iile i 0n *c1e%a utilizatorului curent 2 C<//>1?:<S>/5 *au cu privile)iile i 0n *c1e%a proprietarului 2 .>GI1>/5. 8ore*punztor celor dou opiuni di*ponibile tipul e*te creat cu drepturi de apelant6 re*pectiv cu drepturile proprietararului. Acea*t *peci!icaie *e aplic i pentru corpul tipului. e a*e%enea6 clauza deter%in %odalitatea 0n care *i*te%ul Oracle identi!ic nu%ele e7terne din cererile6 operaiile );. i co%enzile S2) dina%ice a!late 0n %etodele %e%bre ale tipului. 9e*triciile re!eritoare la clauza de invocare *unt ur%toareleF *e poate *peci!ica doar pentru tipuri obiect6 nu i pentru tipurile colecie 2tablouri i%bricate *au vectori5G *e poate *peci!ica 0n de!iniia *ubtipurilor6 dar nu%ai pentru claritate cu aceeai valoare din *upertip6 deoarece *ubtipurile %otene*c %odelul de acordare de drepturi al *upertipului lor 2*c1i%barea ace*tei opiuni 0n cadrul *ubtipului duce la eroarea H 3)S8 ''$22F supert=pesJs 0<?EI. is di++erent than subt=peJs 0<?EI. I5G dac *upertipul a !o*t creat cu drepturi .>GI1>/6 *ubtipurile trebuie create 0n aceeai *c1e% ca i *upertipul. 8lauza 0S O*5>C? per%ite crearea unui tip obiect rdcin6 iar <1.>/ *e utilizeaz pentru a de!ini un *ubtip al unui tip *peci!icat. En ace*t ulti% caz6 *upertipul e7i*tent trebuie * !ie un tip obiect care * per%it crearea de *ubtipuri 2 1O? GI10)56 alt!el e*te returnat eroarea H 3)S8''%9'F
1

(entru a c:ti)a claritate i *i%plitate au !o*t eli%inate ele%entele de *inta7 proprii caracteri*ticilor S2)5 ce per%it a*ocierea cla*elor 5a6a i *tructurilor C cu tipuri obiect per*i*tente Oracle.

1,

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

attempting to create a subt=pe <1.>/ a GI10) t=pe I. +n *ubtip %otenete caracteri*ticile *upertipului *u i6 pentru a *e di*tin)e de ace*ta6 trebuie * *upra*crie *au * adau)e proprieti. Atributele care !or%eaz *tructura obiectului *unt c:%puri de date caracterizate prin nu%e i tip. (entru orice tip obiect trebuie *peci!icat cel puin un atribut. ac *e creeaz un *ubtip6 nu%ele noilor atribute nu pot !i identice cu nu%ele atributelor *au %etodelor din *upertip. #ipurile de date ale atributelor pot !i prede!inite *au de!inite de utilizator. 9e*triciile relative la atribute *untF nu *unt per%i*e atribute de tip /OAI.6 )O1#6 )O1# /0A *au </OAI.G pentru un atribut de tip re!erin6 obiectul int trebuie * aib un identi!icator obiectG la crearea unui tip colecie nu *e pot *peci!ica ele%ente de tip )eneric 2. 8lauza 1O? GI10) per%ite e7tinderea tipului re*pectiv 2valoarea i%plicit e*te GI10)5. 8lauza 1O? I1S?01?I0*)> *peci!ic dac pot !i con*truite in*tane ale obiectului re*pectiv 2valoarea i%plicit e*te I1S?01?I0*)>5. ,e *peci!ic 1O? I1S?01?I0*)> dac nu e7i*t con*tructor 2de!init de utilizator *au i%plicit5 pentru tipul re*pectiv. #rebuie *peci!icate ace*te cuvinte c1eie pentru tipurile care au toate %etodele nein*taniabile 2%otenite *au *peci!icate 0n de!iniie5 *au care nu de!ine*c nici un atribut nou. ,inta7a detaliat pentru *peci!icaia unei %etode 2 spec:metoda5 e*teF 3 3 3NOT4 O,ERRIDIN-4 3 3NOT4 +INAL4 3 3NOT4 INSTANTIABLE4 K K.E.BER L STATICM KPROCED(RE nume:proc 3 2parametru tip:de:date 36 parametru tip:de:dateB4 5 4 3 KIS L ASM speci+icaie:apelare4 L +(NCTION nume:+unctie 3 2parametru tip:de:date 36 parametru tip:de:dateB4 5 4 RET(RN tip:de:date 3 KIS L ASM speci+icaie:apelare4 M L 3+INAL4 3INSTANTIABLE4 CONSTR(CTOR +(NCTION tip:obiect 3 2 3SEL+ IN O(T tip:obiect64 parametru tip:de:date 36 parametru tip:de:dateB4 5 4 RET(RN SEL+ AS RES(LT 3 KIS L ASM speci+icaie:apelare4 M L K.AP L ORDERM .E.BER +(NCTION nume:+uncie 3 2parametru tip:de:date 36 parametru tip:de:dateB4 5 4 RET(RN tip:de:date 3 KIS L ASM speci+icaie:apelare4 M 36 Kclau e:subprogram L speci+:map:orderMB4 36 PRA-.A RESTRICT*RE+ERENCES 2 Knume:metoda L DE+A(LTM6 lista:constrKngeri5 4 8lauzele de %otenire *peci!icate la nivel de tip 2 GI10)6 I1S?01?I0*)>5 per%it *tabilirea relaiei dintre *upertipuri i *ubtipuri. =a de!inirea %etodelor e7i*t opiuni de %otenire *i%ilare6 intervenind 0n plu* clauza O&>//I.I1#. O&>//I.I1# *peci!ic dac %etoda *upra*crie o %etod de!init 0n *upertip. Ace*t cuv:nt c1eie e*te nece*ar doar dac %etoda rede!inete o %etod a *upertipului. ;aloarea i%plicit e*te 1O? O&>//I.I1#. GI10) indic !aptul c %etoda nu poate !i *upra*cri* 0n *ubtipuri. ,pre deo*ebire de clauza a*e%ntoare pentru crearea tipurilor obiect6 valoarea i%plicit e*te 1O? GI10).
2

#ipurile )enerice vor !i prezentate 0ntr@o *eciune *pecial a ace*tui capitol.

Orientare pe obiecte n Oracle9i

10

I1S?01?I0*)> indic dac *e d o i%ple%entare pentru %etoda re*pectiv. ;aloarea i%plicit e*te I1S?01?I0*)>. ac o %etod e*te declarat nein*taniabil 2 1O? I1S?01?I0*)>56 atunci nu pot !i *peci!icate clauzele GI10) *au S?0?IC. En ace*t caz6 trebuie * e7i*te cel puin un *ubtip care i%ple%enteze %etoda re*pectiv. 8lauza ;>;*>/ *peci!ic o !uncie *au procedur a*ociat tipului obiect. #ipul poate !i re!erit 0n cadrul *ubpro)ra%ului re*pectiv cu ajutorul cuv:ntului c1eie S>)G6 ace*ta !iind para%etrul i%plicit al tuturor %etodelor ne*tatice. e e7e%plu6 orice apel de tipul ob.metoda25 al unei %etode ne*tatice pre*upune e7i*tena unui para%etru i%plicit6 i anu%e6 a obiectului ob re!erit ca S>)G. ,pre deo*ebire de %etodele ;>;*>/6 cele de tip S?0?IC nu au para%etrul i%plicit S>)G. &le *unt invocate prin pre!i7area cu nu%ele tipului 2 nume:tip.metoda255 i i%ple%enteaz !uncionaliti care nu depind de in*tanele tipului. (entru toate %etodele declarate 0n de!iniia tipului trebuie de!inite i%ple%entri 0n corpul tipului. irectiva de co%pilare 3/0#;0 />S?/IC?:/>G>/>1C>S nu per%ite %etodelor acce*ul pentru citireJ*criere la tabele ale bazei de date iJ*au variabile din pac1ete. (rin ur%are6 ace*t lucru e*te util pentru evitarea e!ectelor laterale 3. ac *e *peci!ic .>G0<)?6 li*ta de con*tr:n)eri e*te aplicat tuturor %etodelor din tipul re*pectiv. 9e*tricia *e aplic unei %etode6 iar con*tr:n)erile pot !iF /1.S @ /ead 1o .atabase State 2nu poate con*ulta tabelele bazei de date !olo*ind co%anda S>)>C?5G A1.S 8 Arite 1o .atabase State 2nu poate %odi!ica tabelele bazei de date !olo*ind co%enzi );.5G /13S 8 /ead 1o 3acLage State 2nu poate re!eri valoarea variabilelor publice dintr@un pac1et5G A13S 8 Arite 1o 3acLage State 2nu poate %odi!ica valoarea variabilelor publice dintr@un pac1et5G ?/<S? 2re*triciile din li*ta de con*tr:n)eri *unt pre*upu*e adevrate5. (entru a putea co%para in*tanele unui tip6 0n cadrul co%enzilor S2)6 trebuie de!init o %etod de ordonare de tip ;03 *au O/.>/6 ne!iind per%i* e7i*tena a%:ndurora. Ace*te %etode nu *e pot de!ini pentru *ubtipuri. 8rearea unui tip vector *e realizeaz cu ur%toarea co%andF CREATE 3OR REPLACE4 T'PE 3schema.4nume:tip:6ector KAS / ISM K,ARRA' L ,AR'IN- ARRA'M 2limit5 O+ tip:de:dateG Acea*t co%and per%ite crearea unui tip vector ce per%ite *tocarea unui *et de ele%ente av:nd acelai tip de date. #rebuie *peci!icate un nu%e i o li%it pozitiv a nu%rului de ele%ente. =i%ita trebuie * !ie un literal 0ntre). ,i*te%ul Oracle nu *uport vectori anoni%i6 adic !r nu%e. Nu%ele tipului de date al obiectelor coninute 0n vector poate !i un tip prede!init6 re!erin *au un tip de!init de utilizator. 8rearea unui tip tablou i%bricat *e !ace cu ajutorul co%enzii ur%toareF CREATE 3OR REPLACE4 T'PE 3schema.4nume:tip:tabimbricat
3

En Oracle nu e*te reco%andat !olo*irea clauzei 3/0#;06 0n a!ara cazurilor 0n care e*te ab*olut nece*ar pentru co%patibilitate cu aplicaiile %ai vec1i. &a va !i depreciat6 pentru c 0ncep:nd cu Oracle9i6 ace*t tip de veri!icri *e !ac auto%at la %o%entul e7ecuiei.

21

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

KAS L ISM TABLE O+ tip:de:dateG Atunci c:nd tipul ele%entelor e*te un tip obiect6 tipul tablou i%bricat de*crie un tablou ale crui coloane *unt 0n core*ponden cu nu%ele i atributele tipului obiect. ac tipul ele%entelor e*te *calar6 atunci tipul tablou i%bricat de*crie un tablou cu o *in)ur coloan de tip *calar6 nu%it CO)<;1:&0)<>. E0e1pl27 , *e de!inea*c tipurile obiect t:artist6 t:polita:asigurare6 t:polite:ti6 t:dim:6 i t:opera:de:arta. #ipul t:polite:ti e*te un un tip tablou i%bricat. intre atributele tipului t:opera:de:arta6 *e re%arc artist care e*te de tip re!erin la un obiect de tip t:artist6 polite de tip tabel i%bricat t:polite:ti i dimensiuni de tip t:dim:66 un vector de di%en*iune trei. /iecare linie din tabloul i%bricat t:polite:ti e*te un obiect de tip t:polita:asigurare.
CREATE TYPE t_artist AS OBJECT ( nume VARCHAR2(30), prenume VARCHAR2(30), anu _nasterii VARCHAR2(!), anu _m"rtii VARCHAR2(!), nati"na itate VARCHAR2(!0), "#ser$atii VARCHAR2(2000))% & CREATE TYPE t_p" ita_asi'urare AS OBJECT ( (")_p" ita VARCHAR2(30), )es(riere VARCHAR2(200), *irma VARCHAR2(+0), $a "are ,-.BER, )ata_("ntra(t /ATE)% & CREATE TYPE t_p" ite_ti AS TAB0E O1 t_p" ita_asi'urare% & CREATE TYPE t_)im_$ AS VARRAY(3) O1 ,-.BER% & CREATE TYPE t_"pera_)e_arta AS OBJECT ( (")_"pera ,-.BER, tip VARCHAR2(20), tit u VARCHAR2(200), artist RE1 t_artist, )ata_(rearii /ATE, )ata_a(3i4itiei /ATE, $a "are ,-.BER, p" ite t_p" ite_ti, )imensiuni t_)im_$, .E.BER 1-,CT5O, 'et_tit u RET-R, VARCHAR2)% &

Ace*t e7e%plu e*te prezentat 0ntr@o %anier *i%pli!icat. &l nu conine *peci!icarea i%ple%entrii %etodei get:titlu6 care trebuie creat prin co%anda C/>0?> O/ />3)0C> ?@3> *O.@. e!inirea corpului unui tip va !i detaliat 0n *eciunea dedicat %etodelor. e re%arcat c de!inirea unui tip obiect nu i%plic alocarea unui *paiu de *tocare 2ulterior6 in*tanierea tipurilor i%plic alocare de *paiu5. Odat de!inite tipurile obiect6 ele pot !i utilizate 0n

Orientare pe obiecte n Oracle9i

21

co%enzi S2) la !el ca tipurile de date native. Noile tipuri obiect de!inite de utilizator pot !i utilizate pentru crearea de tabele relaionale *au obiect. 8o%anda C/>0?> ?0*)> a !o*t co%pletat cu noi opiuni 0n ace*t *en*. 8u ajutorul ace*tei co%enzi *e pot crea tabele obiect a*ociate tipurilor obiect e7i*tente. ,inta7a *i%pli!icat a unei co%enzi de creare a unui tabel obiect e*te ur%toareaF CREATE TABLE 3schema.4tabel O+ 3schema.4tip:obiectG E0e1pl27 , *e creeze un tabel obiect tab:artisti de*tinat artitilor care e7pun lucrri 0n cadrul %uzeului. , *e in*ereze 0nre)i*trri 0n ace*ta6 abord:nd tabelul at:t din punct de vedere obiectual6 c:t i relaional. e a*e%enea6 * *e creeze un tabel relaional cumparari pentru a %enine o i*torie a ac1iziiilor de opere de art.
CREATE TAB0E ta#_artisti O1 t_artist% 5,SERT 5,TO ta#_artisti VA0-ES (t_artist (61ran(is("6, 67"8a6, 29!:, 2;2;, 6spani" a6, ,-00))% 5,SERT 5,TO ta#_artisti VA0-ES (6Henri6, 6.atisse6, 2;:<, 2<+!, 6*ran(e4a6, ,-00)% CREATE TAB0E (umparari ( "pera t_"pera_)e_arta, )ata_(umpararii /ATE, pret ,-.BER, $an4at"r VARCHAR2(200)) ,ESTE/ TAB0E "pera=p" ite STORE AS tst"(_p" ite%

#abelul cumparari e*te un tabel relaional cu o coloan de tip obiect. ac nu *e *peci!ic tabelul de *tocare pentru tabloul i%bricat din co%ponena tipului t:opera:de:arta6 opera.polite de tip t:polite:ti6 atunci apare eroarea HO/0822913F must speci+= table name +or nested table column or attributeI. O coloan a unui tabel6 un obiect6 un atribut al unui obiect6 o colecie *au un ele%ent al unei colecii are valoarea null dac a !o*t iniializat cu null *au dac nu a !o*t iniializat deloc. +n obiect a crui valoare e*te null *e nu%ete obiect auto%at null. +n a*t!el de obiect e*te di!erit de unul ale crui atribute au valoarea null. Atunci c:nd toate atributele unui obiect *unt null6 ele pot !i %odi!icate i %etodele *ale pot !i apelate. En *c1i%b6 un obiect auto%at null nu per%ite ace*te operaii. E0e1pl27 8o%enzile ur%toare ilu*treaz co%entariile re!eritoare la valorile null. &le !urnizeaz rezultate di!erite. (ri%a co%and I1S>/? introduce o valoare di!erit de null pentru coloana opera6 iar a doua introduce o valoare null.
5,SERT 5,TO (umparari VA0-ES (t_"pera_)e_arta (,-00, ,-00, ,-00, ,-00, ,-00, ,-00, ,-00, ,-00, ,-00), 62!>.a8>20036, 2000, 6.an" e Sai4es(u6 )% 5,SERT 5,TO (umparari VA0-ES (,-00, 62!>.a8>20036, 2000, 6.an" e Sai4es(u6 )%

En a%bele cazuri6 *i*te%ul aloc *paiu 0n tabelul cumparari pentru o nou linie i *eteaz coloanele de tip *calar la valorile !urnizate. En pri%ul caz6 *i*te%ul aloc *paiu pentru un obiect 0n coloana opera i *eteaz !iecare dintre atributele obiectului la valoarea null.

22

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

En cel de@al doilea caz 0n*6 c1iar c:%pul opera ia valoarea null i nu e*te alocat *paiu pentru ace*ta. 8u alte cuvinte6 doar 0n pri%a co%and e*te in*taniat obiectul. +neori *e pot o%ite veri!icrile pentru valorile null 2predicatul IS 1<))5. e e7e%plu6 o linie a unui tabel obiect 2o linie obiect5 nu poate !i null6 iar un tablou i%bricat de obiecte nu poate conine un ele%ent a crui valoare e*te null. En* un tablou i%bricat *au un vector6 luate ato%ic6 pot avea valoarea null6 aa c e*te nece*ar tratarea ace*tor condiii. O colecie null e*te di!erit de una vid6 acea*ta reprezent:nd o colecie in*taniat6 care nu conine nici un ele%ent. E0e1ple7 a5 , *e a!ieze preul i titlul operelor de art cu%prate 0n ulti%ele 3 luni. ac valoarea coloanei opera e*te null * *e a!ieze H.ncorectI 2*e ob*erv nece*itatea alias8ului6 !r de care nu *e poate !ace re!erirea titlului operei de art5.
SE0ECT (=pret, ,V02((="pera, (="pera=tit u ,65n("re(t6) Opera 1RO. (umparari ( ?HERE A//_.O,THS ((=)ata_(umpararii, 3) @ SYS/ATE%

b5 , *e %odi!ice valoarea operelor de art 0nre)i*trate 0n tabelul cumparari6 a*t!el 0nc:t * !ie e)al cu preul a*ociat. , *e eli%ine 0nre)i*trrile re!eritoare la operele de art care au arti*tul ne*peci!icat.
-P/ATE SET /E0ETE ?HERE (umparari ( pret A (="pera=$a "are% 1RO. (umparari ( (="pera=artist 5S ,-00%

#ipurile de!inite de utilizator *tocate per*i*tent 4 pot !i utilizate doar pentru o *in)ur baz de date. Nu *e poate !olo*i o le)tur 0ntre baze de date 2 database linL5 pentru a e7ecuta una dintre ur%toarele aciuniF conectarea la o baz de date di*tant pentru intero)area6 crearea *au %odi!icarea datelor de un tip de!init de utilizator *au a unui obiect re!erin dintr@un tabel di*tantG declararea de variabile 3)4S2) av:nd un tip de!init de utilizator care aparine unei baze de date di*tanteG co%unicarea unui ar)u%ent av:nd un tip de!init de utilizator *au returnarea unei valori6 0ntr@un apel de procedur 3)4S2) la di*tan.

3.3. -ipul de date re%erin


+n obiect de tip re!erin 2 />G5 e*te o adre* lo)ic a unei linii obiect. #ipul de date re!erin e*te prede!init 0n Oracle. e obicei6 tipul de date />G i coleciile de obiecte de ace*t tip %odeleaz relaiile dintre entiti 2relaiile man=8to8one *au one8to8man=5 0nlocuind nece*itatea de!inirii c1eilor e7terne relaionale. 9e!erinele a*i)ur un %ecani*% *i%plu pentru re)*irea obiectelor *tocate 0n tabelele obiect6 utiliz:nd notaia cu punct. En ace*t caz6 *i*te%ul )e*tioneaz auto%at le)tura ctre tabelul obiect re!erit. O re!erin obiect identi!ic 0n %od unic un obiect *tocat 0ntr@un tabel *au vizualizare obiect. e obicei6 o valoare de tip re!erin e*te caracterizat deF identi!icatorul unic al obiectului re!erit 2OI. 8 Ob"ect I.enti+ier5G
4

#ipurile per*i*tente *unt cele declarate cu o co%and C/>0?> ?@3>6 *pre deo*ebire de cele declarate 0n cadrul blocurilor 3)4S2) care *unt te%porare.

Orientare pe obiecte n Oracle9i

23

identi!icatorul unic a*ociat tabelului obiect re!eritG identi!icatorul liniei 2/OAI.5 din tabelul obiect 0n care e*te *tocat obiectul 2identi!icatorul /OAI. e*te de obicei !olo*it pentru acce*ul rapid la obiectele *tocate5.

,i%ilar c1eilor e7terne6 re!erinele obiect *unt utile 0n %odelarea relaiilor co%ple7e dintre entiti. &le *unt %ai !le7ibile dec:t c1eile e7terne deoareceF *unt puternic tipizate6 a*i)ur:nd o veri!icare %ai ri)uroa* i %ai rapid a tipului6 la %o%entul co%pilriiG per%it %odelarea opti% 2*paiu de *tocare i ti%p de acce*5 a relaiilor one8to8man=6 prin inter%ediul coleciilor de re!erine obiectG a*i)ur re!erirea i obinerea e!icient a obiectelor !r a con*trui co%enzi S2) co%ple7eG per%it evitarea "oin@urilor %ultitabelG per%it aplicaiilor * obin toate obiectele care *unt 0n relaie6 prin inter%ediul unei *in)ure cereri ctre ser6er. (entru ca re!erinele obiect * poat i%ple%enta c1ei e7terne6 trebuie ca obiectele re!erite * !ac parte din vizualizri *au tabele obiect cu identi!icatori bazai pe c1eia pri%ar. Atunci c:nd *e de!ine*c vizualizri obiect pe baza tabelelor relaionale6 identi!icatorii obiectelor con*truite *unt de obicei bazai pe c1eile pri%are ale tabelelor relaionale de la care *@a pornit. e a*e%enea6 la de!inirea unui tabelul obiect6 *i*te%ul Oracle per%ite utilizarea valorilor c1eii pri%are ca identi!icatori obiect ai liniilor obiect6 0n locul identi!icatorilor i%plicii6 )enerai de *i*te% .

-ipuri re%erin cu do(eniu


En declaraia de tip re!erin a unei coloane6 a unui ele%ent al unei colecii *au a unui atribut al unui tip obiect *e poate include con*tr:n)erea de a acce*a doar re!erine ctre un anu%e tip obiect *peci!icat. Ace*te tipuri re!erin *e nu%e*c tipuri re!erin cu do%eniu. &le nece*it %ai puin *paiu de *tocare i a*i)ur un acce* %ai e!icient dec:t cele !r do%eniu. En )eneral6 o coloan poate conine re!erine ctre obiecte de un anu%it tip de date declarat6 !r ca ace*t lucru * depind de tabelul obiect 0n care *unt *tocate obiectele re!erite. En particular6 o coloan de tip re!erin poate !i con*tr:n* * conin doar re!erine ctre obiecte aparin:nd unui tabel *peci!icat. Ace*te re!erine ar trebui !olo*ite ori de c:te ori e*te po*ibil6 deoarece au o di%en*iune %ai %ic dec:t re!erinele !r do%eniu6 *i*te%ul ne!iind con*tr:n* * *toc1eze identi!icatorul tabelului. e a*e%enea6 cererile ce conin re!erine cu do%eniu pot !i opti%izate 0n "oin@uri. E0e1pl27 , *e de!inea*c un tabel ce conine in!or%aii de*pre *pecialitii care *tudiaz operele de art din %uzeu. Ace*t tabel va !olo*i pentru atributul adresa o re!erin cu do%eniu. ,e pre*upune c obiectele de tip t:adresa *unt *tocate 0ntr@un tabel obiect *eparat6 tab:adrese. +lti%ele dou co%enzi arat %odalitatea 0n care pri%e*c valori coloanele de tip re!erin din tabelul tab:specialisti.
CREATE TYPE t_a)resa AS OBJECT ( (")_a)resa ,-.BER, stra)a VARCHAR2(+0), (")_p"sta VARCHAR2(20), "ras VARCHAR2(!0), Bu)et VARCHAR2(30), tara VARCHAR2(!0))% & CREATE TAB0E ta#_a)rese O1 t_a)resa% 5,SERT 5,TO ta#_a)rese VA0-ES (2,6, Ba (es(u ++6,692006,6Bu(uresti6,6Se(t"r 36,6R"mania6)%

24

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

5,SERT 5,TO ta#_a)rese VA0-ES (2,6V .anu 2:6,629006,6Brai a6,,-00,6R"mania6)% CREATE TYPE t_spe(ia ist AS OBJECT ( (") ,-.BER, nume VARCHAR2(30), prenume VARCHAR2(!0), aut"ri4atie VARCHAR2(+), a)resa RE1 t_a)resa)% & CREATE TAB0E ta#_spe(ia isti O1 t_spe(ia ist (SCOPE 1OR (a)resa) 5S ta#_a)rese)% 5,SERT 5,TO ta#_spe(ia SE0ECT 3, 60ii(eanu6, 1RO. ta#_a)rese a ?HERE a=(")_a)resa A 5,SERT 5,TO ta#_spe(ia SE0ECT !, 60ii(eanu6, 1RO. ta#_a)rese A ?HERE a=(")_a)resa A isti 6Aur"ra6, 60A3!+6, RE1(a) 2% isti 67a#rie 6, 6072236, RE1(a) 2%

O re!erin de!init prin con*tr:n)erea SCO3> are ca raz de aciune un anu%it tabel obiect de tipul *peci!icat *au de orice *ubtip al ace*tuia. En e7e%plul analizat6 coloana adresa are ca valori doar obiecte din tabelul obiect tab:adrese de tip t:adresa. 8on*tr:n)erea *e *peci!ic 0n co%anda de creare *au %odi!icare a unui tabel i are ur%toarea *inta7F SCOPE +OR 2coloana L atribut5 IS tabel:obiect ac raza de aciune a re!erinei e*te un tabel obiect de un *ubtip al tipului declarat6 atunci coloana re!erin e*te e!ectiv con*tr:n* * conin nu%ai re!erine la in*tanele *ubtipului 2i ale *ubtipurilor ace*tuia6 dac au !o*t de!inite5 din tabel. &*te po*ibil ca un obiect identi!icat de o re!erin * devin la un %o%ent dat indi*ponibil 2de e7e%plu prin ter)erea obiectului *au prin *c1i%barea privile)iilor5. +n a*t!el de obiect re!erin *e nu%ete izolat. En ace*t *en*6 pentru te*tarea validitii re!erinelor *e !olo*ete predicatul IS .01#)I1#. ;arianta IS 1O? .01#)I1# poate !i utilizat pentru a identi!ica re!erinele valide. E0e1pl27 , *e a!ieze *pecialitii care au adre*a incorect 0nre)i*trat 0n tabelul obiect tab:specialisti.
SE0ECT 1RO. ?HERE /E0ETE ?HERE prenumeCC6 6CCnume D1ara a)resaD ta#_spe(ia isti a)resa 5S /A,705,7% 1RO. ta#_a)rese (")_a)resa A 2%

(ri%a co%and *electeaz liniile care6 din di!erite %otive6 au pierdut re!erina ctre adre*. .niial6 acea*ta nu va returna nici o linie rezultat6 le)turile !iind corecte. ac *e e7ecut co%anda .>)>?> care ur%eaz i apoi *e ree7ecut cererea6 *e ob*erv c re!erinele ctre adre*a av:nd codul 1 au devenit izolate6 ele re!erind aceeai linie obiect de tip t:adresa din tabelul tab:adrese6 care a !o*t ter*. Acce*area obiectului adre*at de o re!erin *e nu%ete dere!ereniere i e*te realizat cu ajutorul ur%toarei !unciiF

Orientare pe obiecte n Oracle9i

2"

DERE+ 2eCpresie:re+erin5 ac ar)u%entul !unciei .>/>G e*te o re!erin ctre un obiect6 acea*ta returneaz in*tana obiect re!erit. 8:nd nu *e aplic .>/>G a*upra re!erinelor *electate de o cerere6 *i*te%ul returneaz identi!icatorul obiect al re!erinei. E0e1pl27 , *e ilu*treze di!erena dintre cele dou abordri ale unei re!erine6 !r i cu dere!ereniere 2!izic6 re*pectiv lo)ic5.
SE0ECT /5ST5,CT a)resa 1RO. ta#_spe(ia isti% SE0ECT /ERE1(a)resa) 1RO. ta#_spe(ia isti%

En cea de@a doua cerere6 unde *@a !olo*it .>/>G6 nu *e poate *peci!ica operatorul .IS?I1C? pentru c nu e*te de!init o %etod de ordonare pentru tipul t:adresa i atunci *i*te%ul ar returna eroarea HO/08229%'F cannot O/.>/ ob"ects Mithout ;03 or O/.>/ method I. &7plicaia e*te c operatorul care !ace proiecia !r dubluri 2.IS?I1C?5 pre*upune o ordonare a li*tei de linii rezultat. ere!erenierea re!erinelor izolate duce la obinerea unui obiect cu valoarea null. e a*e%enea6 *i*te%ul Oracle a*i)ur dere!erenierea i%plicit a re!erinelor atunci c:nd e*te nece*ar. E0e1pl27 ,e con*ider tipul t:anga"at ce conine dou atribute6 nu%ele i re!erina ctre directorul an)ajatului re*pectiv. irectorul trebuie * !ie6 ca i *ubalternul6 un obiect de tip t:anga"at.
CREATE TYPE t_an'aBat AS OBJECT ( nume VARCHAR2(!0), )ire(t"r RE1 t_an'aBat)%

ac D e*te un obiect de tip t:anga"at6 atunci e7pre*ia D.director.nume ur%rete auto%at le)tura de la o per*oan D la alt per*oan6 directorul lui D6 i returneaz nu%ele ace*tuia. e re%arcat c acea*t re!erire e*te per%i* 0n S2)6 dar nu i 0n 3)4S2).
CREATE TAB0E ta#_an'aBati O1 t_an'aBat% >> )ire(t"ru 'enera este 7e"r'es(u 5,SERT 5,TO ta#_an'aBati(nume) VA0-ES (67e"r'es(u6)% >>)"i su#a terni )e>ai ui, 5"nes(u si A e(u 5,SERT 5,TO ta#_an'aBati SE0ECT 65"nes(u6, RE1(a) 1RO. ta#_an'aBati a ?HERE 0O?ER(a=nume) A 6'e"r'es(u6% 5,SERT 5,TO ta#_an'aBati SE0ECT 6A e(u6, RE1(a) 1RO. ta#_an'aBati a ?HERE -PPER(a=nume) A 67EOR7ESC-6%

, *e *electeze nu%ele directorului *alariatului Alecu.


SE0ECT a=)ire(t"r=nume D/ire(t"ru 1RO. ta#_an'aBati a ?HERE 5,5TCAP(a=nume) A 6A e(u6% ui A e(u esteD

A!larea valorii re!erin ce adre*eaz o linie obiect *e !ace prin *electarea in*tanei din tabelul obiect care conine obiectul de re!ereniat i aplicarea operatorului />G. E0e1pl27 , *e obin o re!erin ctre *peciali*tul cu nu%ele <abriel =iiceanu. e re%arcat c cererea trebuie * returneze e7act o linie.

2'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

SET SERVERO-TP-T O, /EC0ARE $_Spe(Re* RE1 t_spe(ia ist% BE75, SE0ECT RE1(s) 5,TO $_Spe(Re* 1RO. ta#_spe(ia isti s ?HERE 0O?ER(s=nume) A 6 ii(eanu6 A,/ 0O?ER(s=prenume) A 6'a#rie 6% /B.S_O-TP-T=P-T_05,E(6EEista " sin'ura intrare6 CC 6 (u a(est nume=6)% EFCEPT5O, ?HE, ,O_/ATA_1O-,/ THE, /B.S_O-TP-T=P-T_05,E (6,u eEista in #a4a )e )ate6)% ?HE, TOO_.A,Y_RO?S THE, /B.S_O-TP-T=P-T_05,E (6EEista mai mu ti (u a(est nume6)% E,/% &

/uncia ;0F>:/>G creeaz o re!erin ctre o linie a unui tabel *au vizualizare obiect al crei identi!icator obiect e*te bazat pe c1eia pri%ar. (entru !iecare linie rezultat a unei cereri6 p*eudocoloana /OA1<; returneaz un nu%r ce indic ordinea 0n care *i*te%ul Oracle *electeaz liniile dintr@un tabel *au dintr@o %uli%e de linii ale unui "oin. Nu%erotarea 0ncepe de la 1. E0e1pl27 , *e adau)e un nou atribut 2cod5 tipului t:anga"at i * *e co%pleteze valoarea ace*tuia utiliz:nd in*tanele deja e7i*tente 0n tabelul tab:anga"ati. , *e adau)e tabelului o con*tr:n)ere de c1eie pri%ar care * includ coloanele cod i nume. , *e creeze o vizualizare obiect a*upra tabelului6 cu identi!icatori obiect bazai pe concatenarea dintre cod i nume. , *e arate %odalitatea de creare a unei re!erine ctre o anu%it linie obiect din cadrul vizualizrii6 linie unic deter%inat de dou valori ale atributelor cod i nume.
>>se a)au'a atri#utu (") tipu ui (reat anteri"r t_an'aBat A0TER TYPE t_an'aBat A// ATTR5B-TE ((") ,-.BER) CASCA/E% >>se pr"pa'a s(3im#area (atre t"ate "#ie(te e )epen)ente >>(ta#_an'aBati) si se p"pu ea4a atri#utu (") -P/ATE ta#_an'aBati SET (") A RO?,-.% CO..5T% A0TER TAB0E ta#_an'aBati A// (PR5.ARY GEY (("), nume))% >>se (reea4a " $i4ua i4are "#ie(t (u i)enti*i(at"ru "#ie(t >>#a4at pe (3eia primara CREATE V5E? $i4_an'aBati O1 t_an'aBat ?5TH OBJECT 5/E,T515ER (("), nume) AS SE0ECT H 1RO. ta#_an'aBati% SE0ECT .AGE_RE1($i4_an'aBati, 2, 67e"r'es(u6) 1RO. /-A0%

.achetul (TL*RE+
(ac1etul prede!init <?):/>G conine proceduri pentru operaiile cu re!erine. ,pre deo*ebire de co%enzile );.6 procedurile din pac1etul <?):/>G prezint avantajul c nu nece*it *peci!icarea tabelului obiect din care !ace parte obiectul re!erit. <?):/>G poate !i utilizat at:t 0n *ubpro)ra%ele i

Orientare pe obiecte n Oracle9i

2)

pac1etele 3)4S2) *tocate pe ser6er6 c:t i 0n aplicaiile 3)4S2) de pe client 2de e7e%plu6 Oracle Gorms5. (ac1etul conine ur%toarele proceduriF S>)>C?:O*5>C?6 care pri%ete ca para%etru de intrare o re!erin i returneaz obiectul re!eritG )OCF:O*5>C?6 care per%ite blocarea unui obiect6 *peci!ic:nd re!erina core*punztoare ace*tuia 2procedura e*te *upra0ncrcat a*t!el 0nc:t6 opional6 obiectul * poat !i reinut 0ntr@o variabil5G <3.0?>:O*5>C?6 care per%ite %odi!icarea unui obiect6 dat !iind o re!erin la ace*taG .>)>?>:O*5>C?6 care pri%ete ca para%etru de intrare o re!erin i are ca rezultat *upri%area obiectului re!erit de acea*ta. E0e1pl27 , *e %odi!ice toate adre*ele din 9o%:nia a*ociate unor *pecialiti6 a*t!el 0nc:t codul potal * !ie 7---. e a*e%enea6 * *e tear) toate adre*ele izolate.
/EC0ARE $_a)resa t_a)resa% C-RSOR (_a)rese 5S SE0ECT RE1(a) re*_a)r 1RO. ta#_a)rese a ?HERE RE1(a) 5, (SE0ECT /5ST5,CT s=a)resa 1RO. ta#_spe(ia isti s) A,/ 5,5TCAP (tara) A 6R"mania6% C-RSOR (_a)rese_i4" ate 5S SE0ECT RE1(a) re*_a)r 1RO. ta#_a)rese a ?HERE ,OT EF5STS (SE0ECT /5ST5,CT s=a)resa 1RO. ta#_spe(ia isti s ?HERE s=a)resa A RE1(a))% BE75, 1OR $_re( 5, (_a)rese 0OOP >> se "#tine "#ie(tu re*erit prin $_re(=re*_a)r -T0_RE1=SE0ECT_OBJECT ($_re(=re*_a)r, $_a)resa)% /B.S_O-TP-T=P-T_05,E (6 C")I 6CC $_a)resa=(")_a)resa)% >> se # "(3ea4a "#ie(tu re*erit >> in $e)erea m")i*i(arii -T0_RE1=0OCG_OBJECT ($_re(=re*_a)r)% $_a)resa=(")_p"sta IA 9000% >> se m")i*i(a "#ie(tu re*erit prin $_re(=re*_a)r -T0_RE1=-P/ATE_OBJECT ($_re(=re*_a)r, $_a)resa)% E,/ 0OOP% 1OR $_re(2 5, (_a)rese_i4" ate 0OOP >> este sters "#ie(tu i)enti*i(at )e re*erinta -T0_RE1=/E0ETE_OBJECT ($_re(2=re*_a)r)% E,/ 0OOP% E,/% &

3.4. 6e%inirea tabelelor obiect

2,

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

Odat cu adu)area caracteri*ticilor obiectuale6 co%anda C/>0?> ?0*)>6 care per%ite crearea de tabele 0ntr@o *c1e% a bazei de date6 a !o*t e7tin* cu noi opiuni pentru a putea !i !olo*it 0%preun cu tipurile obiect. Au !o*t adu)ate clauze core*punztoare pentru crearea tabelelor obiect i a tabelelor relaionale ce conin coloane de tipuri obiect6 re!erin *au colecie. (entru a crea un tabel6 utilizatorul trebuie * dein privile)iului obiect C/>0?> ?0*)> *au cel *i*te% C/>0?> 01@ ?0*)>. En cazul tabelelor obiect6 proprietarul tabelului re*pectiv 2obiect *au relaional cu o coloan de tip obiect5 trebuie * dein 0n plu* privile)iul obiect >D>C<?> *au privile)iul *i*te% >D>C<?> 01@ ?@3> pentru a putea acce*a tipurile re!erite de tabel. Ace*te privile)ii trebuie acordate 0n %od e7plicit i nu prin inter%ediul unui role. ,inta7a co%enzii C/>0?> ?0*)> pentru crearea tabelelor obiect e*te 5F CREATE TABLE 3schema.4nume:tabel O+ 3schema.4tip:obiect 3 3NOT4 S(BSTIT(TABLE AT ALL LE,ELS4 3 2 K Kcoloan I atributM 3DE+A(LT eCpr4 3constr:linie 3constr:linieB4 L constr:linie:re+4 L Kconstr:tabel L constr:tabel:re+M M 5 4 3clau :OI.4 3proprieti:colecie4G Acea*t co%and creeaz un tabel obiect 0n *c1e%a curent *au 0n cea precizat 2 schema5. 8lauza OG *peci!ic tipul 2tip:obiect5 core*punztor tabelului obiect. /iecare linie va conine o in*tan obiect6 creia i *e va a*ocia la in*erare c:te un identi!icator obiect unic )enerat de *i*te% 2OI.5. 8lauza .>G0<)? per%ite *peci!icarea unei valori i%plicite. Acea*ta va !i atribuit coloanei6 la e7ecuia unei co%enzi de in*erare care o%ite o valoare e7plicit pentru coloana re*pectiv. (entru o coloan de tip de!init de utilizator6 clauza .>G0<)? trebuie * conin o invocare literal a con*tructorului obiectului *au coleciei re*pective. #ipul de date al e7pre*iei trebuie * core*pund cu tipul coloanei. &7pre*ia .>G0<)? poate include orice !uncie S2) care nu returneaz un ar)u%ent literal6 o re!erin ctre o coloan *au apelul unei !uncii i%bricat. e a*e%enea6 o e7pre*ie i%plicit nu poate conine re!erine ctre !uncii 3)4S2) *au alte coloane6 p*eudocoloanele )>&>)6 3/IO/ i /OA1<;6 con*tante de tip dat calendari*tic ne*peci!icate 0n totalitate. O invocare literal a unei %etode de tip con*tructor e*te apelul %etodei con*tructor 0n care ar)u%entele *unt !ie valori6 !ie la r:ndul lor alte invocri literale de %etode con*tructor. Nu *unt per%i*e variabile *au !uncii. E0e1pl27 , *e de!inea*c un tip tablou i%bricat 2t:artisti:ti5 de obiecte de tip t:artist. #ipul t:artist a !o*t de!init anterior i conine c:%purile nume6 prenume6 anul:nasterii6 anul:mortii6 nationalitate i obser6atii. En ace*t e7e%plu *e con*ider c tipul conine i un atribut adresa de tip t:adresa.
A0TER TYPE t_artist A// ATTR5B-TE a)resa t_a)resa CASCA/E% CREATE TYPE t_artisti_ti AS TAB0E O1 t_artist% &

O invocare literal a con*tructorului pentru tipul tabel i%bricat t:artisti:ti e*te ur%toareaF
t_artisti_ti (
5

En co%entariile care ur%eaz *unt !cute re!eriri la tabele obiect *au relaionale care conin coloane de tip obiect. (entru prezentarea detaliat a co%enzii C/>0?> ?0*)>6 vezi capitolul 2.

Orientare pe obiecte n Oracle9i t_artist (6Bran(usi6, 6C"nstantin6, 2;9:, 2<+9, ,-00, t_a)resa (,-00, ,-00, ,-00, 6T' Jiu6, 6R"mania6), t_artist (6/a i6, 6Sa $a)"r6, 2<0!, 2<;<, ,-00, ,-00), t_artist (6Pi(ass"6, 6Pa# "6, 2;;2, 2<93, ,-00, t_a)resa (2, 6Rue )es E(" es 236, 6223!+6, 6Paris6, 6Paris6, 61ran(e6))%

20

E0e1pl27 , *e !olo*ea*c invocrile literale de %etode con*tructor pentru a *peci!ica valori i%plicite ale coloanelor unui tabel relaional care conine in!or%aii de*pre operele de art.
CREATE TAB0E "pere_)e_arta ( (")_"pera ,-.BER, tip VARCHAR2(20), tit u VARCHAR2(200), artist t_artist /E1A-0T t_artist (6A6, 6A6, ,-00, ,-00, ,-00, ,-00, ,-00), )ata_(rearii /ATE, )ata_a(3i4itiei /ATE /E1A-0T SYS/ATE, p" ite t_p" ite_ti /E1A-0T t_p" ite_ti(), )imensiuni t_)im_$ /E1A-0T t_)im_$ (>2,>2,>2)) ,ESTE/ TAB0E p" ite STORE AS p" ite_st"re%

e re%arcat c t:polite:ti25 e*te invocarea literal a %etodei con*tructor pentru un tablou i%bricat vid de ace*t tip6 iar t:dim:62@16 @16 @15 in*taniaz un obiect vector de tip t:dim:6 cu ele%entele i%plicite @16 @16 @1 ale*e a*t!el 0nc:t * *e indice c nu au !o*t introdu*e di%en*iunile operei re*pective. Opiunea clau :OI. are ur%toarea !or%F OB ECT IDENTI+IER IS KS'STE. -ENERATED L PRI.AR' 3E'M 8lauza per%ite * *e *peci!ice dac identi!icatorul obiect " al tabelului obiect e*te )enerat de *i*te% *au e*te bazat pe c1eia pri%ar a tabelului. Opiunea i%plicit e*te S@S?>; #>1>/0?>.. 9e*triciile le)ate de clauza re!eritoare la identi!icatorului obiect *untF *e poate *peci!ica O*5>C? I.>1?IGI>/ IS 3/I;0/@ F>@ doar dac *@a de!init o con*tr:n)ere de c1eie pri%arG clauza nu poate !i !olo*it pentru tablouri i%bricate. (roprietile tabelelor obiect *unt *i%ilare celor ale tabelelor relaionale6 cu di!erena c 0n loc * *e *peci!ice coloane6 *e *peci!ic atribute. Nu%ele atributului trebuie * !ie precedat de nu%ele coloanei de tip obiect din care !ace parte. 8lauza de *ub*tituibilitate 31O?4 S<*S?I?<?0*)> 0? 0)) )>&>)S *e utilizeaz pentru a preciza dac pot !i in*erate linii obiect core*punztoare *ubtipurilor tipului declarat al tabelului obiect a*upra cruia *e !ace *peci!icaia. ;arianta ne)at indic !aptul c tabelul obiect nu e*te *ub*tituibil. En ace*t caz6 *ub*tituia e*te dezactivat pentru toate atributele obiectelor i ele%entele coleciilor inte)rate 0n cadrul liniei. Opiunea i%plicit e*te cea de *ub*tituibilitate. (e l:n) acea*t opiune6 caracteri*ticile de *ub*tituibilitate pot !i *peci!icate i la nivel de coloan *au atribut core*punztor unei coloane de tip obiect6 unui atribut *au unui ele%ent dintr@o coloan *au atribut de tip colecie. ,inta7a de *peci!icare la nivel de coloan e*te ur%toareaF
"

+n identi!icator c1eie pri%ar e*te unic la nivel local 2dar nu 0n %od nece*ar i la nivel )lobal5. ac *e cere un identi!icator obiect care * !ie unic la nivel )lobal6 atunci trebuie veri!icat !aptul c i c1eia pri%ar e*te unic la ace*t nivel.

31

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

KCOL(.N 3ELE.ENT4 IS O+ 3T'PE4 2 3ONL'4 tip:de:date5 L 3NOT4 S(BSTIT(TABLE AT ALL LE,ELSM Noiunile vor !i e7plicate pe lar) 0n *eciunea re!eritoare la %otenirea tipurilor. 8lauza de *ub*tituibilitate indic dac atributele *au coloanele obiect din aceeai ierar1ie *e pot *ub*titui reciproc. A*t!el6 *e poate *peci!ica dac o coloan poate conine doar in*tane ale tipului declarat *au i ale *ubtipurilor ace*tuia. Opiunea >)>;>1? *e utilizeaz atunci c:nd *e !ace re!erire la tipul ele%entului unei coloane *au al unui atribut de tip colecie. 8lauza IS OG 3?@3>4 2O1)@ tip:de:date5 con*tr:n)e tipul coloanei obiect la un *ubtip al tipului declarat. (rezena opiunii de *ub*itutibilitate arat c acea coloan obiect poate conine in*tane core*punztoare unuia dintre *ubtipurile tipului declarat. En cazul variantei ne)ate6 *ub*tituibilitatea e*te dezactivat pentru orice co%ponente *au atribute obiectuale inclu*e 0n vectorii *au tablourile i%bricate re*pective. A*upra clauzei CO)<;1 *unt i%pu*e trei re*triciiF nu poate !i *peci!icat pentru un atribut al unei coloane obiect. nu *e poate *peci!ica pentru o coloan obiect a unui tabel relaional *au obiect dac *ub*tituibilitatea tabelului obiect a !o*t precizat e7plicitG pentru o coloan de tip colecie6 *in)ura parte a clauzei care *e poate utiliza e*te cea de *ub*tituibilitate. Nu%rul %a7i% de coloane dintr@un tabel e*te de 1---. ar6 la crearea unui tabel obiect 2*au a unui tabel relaional cu coloane de tip obiect6 re!erin *au colecie5 *i*te%ul Oracle a*ociaz coloane relaionale coloanelor de tipuri de!inite de utilizator. Apare 0n ace*t !el un e!ect de coloane a*cun*e6 nu%rul total de coloane trebuind * *e 0ncadreze 0n li%ita de 1--- precizat. E0e1pl27 , *e creeze tipul obiect t:autor 2cu atributele cod6 nume6 prenume6 seC5 i * *e de!inea*c un tabel obiect pentru *tocarea obiectelor de ace*t tip.
CREATE OR REP0ACE TYPE t_aut"r AS OBJECT ( (") ,-.BER, nume VARCHAR2(30), prenume VARCHAR2(!0), seE VARCHAR2(2))% & CREATE TAB0E ta#_aut"ri O1 t_aut"r%

Ace*t tabel poate !i privit 0n dou %oduriF ca un tabel cu o *in)ur coloan 0n care !iecare linie e*te un obiect de tipul t:autor6 per%i:nd e7ecutarea operaiilor obiectualeG ca un tabel %ulticoloan 0n care !iecare atribut al tipului t:autor are c:te o coloan a*ociat6 !iind po*ibil e7ecuia operaiilor relaionale. E0e1pl27 , *e introduc6 0n %anier relaional6 dou 0nre)i*trri 0n tabelul tab:autori i * *e li*teze o 0nre)i*trare6 0n %anier obiectual.
5,SERT VA0-ES 5,SERT VA0-ES SE0ECT 5,TO ta#_aut"ri (0, 6P esu6, 6An)rei6, 6.6 )% 5,TO ta#_aut"ri (2, 6R" an)6, 6R"main6, 6.6)% VA0-E(a)

Orientare pe obiecte n Oracle9i 1RO. ?HERE ta#_aut"ri a -PPER(a=nume)

31

iJe 6K0K6%

(ri%ele in*truciuni in*ereaz obiecte de tip t:autor 0n tabelul tab:autori privit ca tabel relaional %ulticoloan. +lti%a *electeaz 0nre)i*trri din tabelul tab:autori ca dintr@un tabel cu o *in)ur coloan6 utiliz:nd !uncia &0)<> pentru a returna liniile rezultat ca in*tane obiect. E0e1pl27 , *e ra!ineze tipul creat anterior6 adu):nd un atribut care * conin adre*a autorului. =iniile tabelului tab:autori *unt linii obiect6 iar valorile atributului adresa *unt coloane obiect.
A0TER TYPE t_aut"r A// ATTR5B-TE a)resa t_a)resa CASCA/E% 5,SERT 5,TO ta#_aut"ri VA0-ES (2, 6Cartares(u6, 6.ir(ea6, 6.6, t_a)resa (3, 6.a'3eru 2+6, 692006, 6Bu(uresti6, 6Se(t"r 26, 6R"mania6))% 5,SERT 5,TO ta#_aut"ri VA0-ES (3, 6Bu4"ianu6, 6Cata ina6,616, t_a)resa(!, 65pates(u 926, 692006, 6Bu(uresti6,6Se(t"r !6, 6R"mania6))%

8lauza constr:linie6 din cadrul co%enzii C/>0?> ?0*)>6 de!inete o con*tr:n)ere la nivel de coloan *au atribut i are !or%a ur%toareF 3CONSTRAINT nume:constr4 K 3NOT4 N(LL L (NIQ(E L PRI.AR' 3E' L clau :re+erin:eCtern L C)EC3 2condiie5 M 3stare:constr4 8lauza constr:tabel de!inete una dintre con*tr:n)erile di*ponibile la nivel de tabel. e obicei6 ace*tea *e !olo*e*c pentru a declara6 0n cadrul de!iniiei tabelului6 o con*tr:n)ere de inte)ritate *au o con*tr:n)ere care adre*eaz %ai %ulte coloane ale tabelului. 3CONSTRAINT nume:constr4 K(NIQ(E 2coloan 36 coloanB 4 5 L PRI.AR' 3E' 2coloan 36 coloanB4 5 L +OREI-N 3E' 2coloan 36 coloanB4 clau :re+erire L C)EC3 2condiie5 M 3stare:constr4 ,i*te%ul Oracle nu per%ite con*tr:n)eri a*upra coloanelor *au atributelor de tip obiect6 colecie6 re!erin *au )O*6 cu dou e7cepiiF con*tr:n)erile 1O? 1<)) *unt per%i*e pentru toate tipurile de!inite de utilizator6 vector *au )O* 2cu e7cepia tablourilor i%bricate5G con*tr:n)erile 1O? 1<))6 de c1eie e7tern i de tip />G *unt per%i*e pentru o coloan de tip re!erin. En )eneral6 la crearea unui *ubtabel *au a unei *ubvizualizri 0n cadrul unei ierar1ii de %otenire nu *e poate *peci!ica o con*tr:n)ere de tip <1I2<> *au 3/I;0/@ F>@. 81eia unic poate !i *peci!icat doar 0n cadrul de!iniiei tabelului *au vizualizrii de pe nivelul rdcin. 81iar dac coloanele i atributele de tip obiect6 colecie6 re!erin *au )O* nu pot avea con*tr:n)eri de c1eie unic6 pri%ar *au e7tern6 cu unele re*tricii6 ace*te con*tr:n)eri *unt di*ponibile pentru coloanele i atributele ace*tor tipuri. 8on*tr:n)erile din *inta7 pot !i *peci!icate a*upra atributelor *calare ale coloanelor de tip obiect. ,e pot i%pune con*tr:n)eri 1O? 1<)) a*upra coloanelor de tip obiect i con*tr:n)eri de tip

32

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

CE>CF care * !ac re!erin la coloane de tip obiect *au la atribute ale unor coloane de tip obiect. 8on*tr:n)erile 1O? 1<)) *unt *in)urele con*tr:n)eri care *e pot *peci!ica la nivel de linie pentru o coloan de tip D;)?=pe *au vector. O a*t!el de con*tr:n)ere nu *e poate *peci!ica pentru un atribut al unui obiect. (entru a i%ple%enta o a*t!el de re*tricie *e poate !olo*i o con*tr:n)ere de tip CE>CF a*ociat cu predicatul IS 1O? 1<)). E0e1pl27 , *e creeze un tabel obiect ce conine artiti6 *peci!ic:nd c atributele nume i prenume *unt obli)atorii. , *e de!inea* un tabel relaional care * conin dou coloane6 artist de tip t:artist i numar:opere de tip nu%eric. #abelul va i%pune aceeai condiie a*upra atributelor nume i prenume ale tipului. ,e ob*erv c operaia de in*erare ce ur%eaz dup crearea tabelelor eueaz cu eroarea HO/08'229'F checL constraint 2S?<.>1?.S@S:C'',9115 6iolatedI.
CREATE TAB0E ta#_artisti O1 t_artist (CHECG (nume 5S ,OT ,-00 OR prenume 5S ,OT ,-00))% CREATE TAB0E statisti(a_artisti ( artist t_artist, numar_"pere ,-.BER, CHECG (artist=nume 5S ,OT ,-00 OR artist=prenume 5S ,OT ,-00))% 5,SERT 5,TO statisti(a_artisti VA0-ES (t_artist (,-00, ,-00, 62;006, 62<006, ,-00, ,-00, ,-00), 20)%

Aa cu% *@a e7e%pli!icat6 la nivelul unui tabel obiect *e pot de!ini aceleai cate)orii de con*tr:n)eri ca i pentru tabelele relaionale obinuite. Ace*te con*tr:n)eri *e re!er la atributele *calare ale unei coloane obiect6 cu e7cepia celor re!erin !r do%eniu. (ot !i *peci!icate con*tr:n)eri de c1eie pri%ar 23/I;0/@ F>@56 c1eie e7tern 2/>G>/>1CI1#- GO/>I#1 F>@56 de unicitate 2<1I2<>5- 1O? 1<))6 de veri!icare a unei condiii 2CE>CF5. E0e1pl27 a5 , *e de!inea*c tabelul obiect tab:opere i * *e pla*eze o con*tr:n)ere de c1eie pri%ar a*upra coloanei cod:opera. ,e va pre*upune c tabelul tab:opere e*te bazat pe tipul t:opera:de:arta de!init anterior. e a*e%enea6 c:%pul titlu e*te obli)atoriu6 iar data crerii operei e*te anterioar datei de ac1iziie.
CREATE TAB0E ta#_"pere O1 t_"pera_)e_arta ( (")_"pera PR5.ARY GEY, tit u ,OT ,-00, CHECG ()ata_(rearii L )ata_a(3i4itiei)) ,ESTE/ TAB0E p" ite STORE AS ts_p" ite% 5,SERT 5,TO ta#_"pere VA0-ES (2, 6s(u ptura6, 6/a$i)6, ,-00, TO_/ATE (622>Bu >2+!06,6))>m"n>88886), SYS/ATE, 220, t_p" ite_ti(), t_)im_$ (200, 2+, +0))%

b5 , *e creeze tabelul relaional opere:de:arta !olo*ind con*tr:n)eri ce includ re!erine la atributele *calare ale unei coloane obiect 2 artist5. &7e%plul a*i)ur c anul naterii arti*tului care a creat opera de art 2anul:nasterii5 e*te anterior anului 0n care acea*ta a !o*t creat i nu%ele lui 2nume5 e*te precizat.
/ROP TAB0E "pere_)e_arta%

Orientare pe obiecte n Oracle9i CREATE TAB0E "pere_)e_arta ( (")_"pera ,-.BER, tip VARCHAR2(20), tit u VARCHAR2(200) ,OT ,-00, artist t_artist /E1A-0T t_artist(6A6, 6A6, ,-00, ,-00, ,-00, ,-00, ,-00), )ata_(rearii /ATE, )ata_a(3i4itiei /ATE /E1A-0T SYS/ATE, $a "are ,-.BER, p" ite t_p" ite_ti /E1A-0T t_p" ite_ti(), )imensiuni t_)im_$ /E1A-0T t_)im_$ (>2, >2, >2), CO,STRA5,T "pera_pJ PR5.ARY GEY ((")_"pera), CO,STRA5,T $eri*_)ate CHECG ()ata_(rearii L )ata_a(3i4itiei), CO,STRA5,T (_artist2 CHECG (artist=anu _nasterii L TO_CHAR ()ata_(rearii, 6RRRR6)), CO,STRA5,T (_artist2 CHECG(artist=nume 5S ,OT ,-00)) ,ESTE/ TAB0E p" ite STORE AS p" ite_st"re%

33

O coloan *au un atribut de tip re!erin pot !i re*tricionate !olo*ind clauza SCO3> *au o clauz de con*tr:n)ere re!erenial. Atunci c:nd o coloan de tip re!erin nu prezint re*tricii6 ea poate *toca re!erine ctre linii obiect de tipul *peci!icat6 coninute 0n orice tabel obiect. En cadrul coloanelor re!erin !r do%eniu nu e*te per%i* *tocarea re!erinelor obiect care conin un identi!icator obiect bazat pe o c1eie pri%ar. ,i*te%ul nu veri!ic dac re!erinele obiect *tocate 0n coloane adre*eaz obiecte linie valide i e7i*tente. e aceea6 coloanele re!erin pot conine re!erine ctre obiecte ine7i*tente. A*e%enea valori re!erin *e nu%e*c re!erine izolate . O coloan re!erin poate !i con*tr:n* * aib ca do%eniu un tabel obiect *peci!icat. ;alorile re!erin *tocate 0n coloane cu do%eniu adre*eaz linii obiect ale tabelului *peci!icat 0n clauza SCO3>. En ace*t caz6 ri*cul de a *toca re!erine izolate e*te %ai %ic. O coloan re!erin poate avea o con*tr:n)ere de inte)ritate re!erenial *i%ilar clauzei />G>/>1C>S !olo*it 0n *peci!icarea c1eilor e7terne pentru tabelele relaionale. 9e!erina obiect *tocat 0n ace*te coloane trebuie * adre*eze un obiect linie valid i e7i*tent 0n tabelul obiect *peci!icat. 8on*tr:n)erile de tip CE>CF *au 3/I;0/@ F>@ nu pot !i i%pu*e unor coloane re!erin. En *c1i%b6 *unt per%i*e con*tr:n)eri de tip 1O? 1<)). O coloan de tip />G re!er un obiect dintr@un tabel *au o coloan obiect. O con*tr:n)ere de tip />G per%ite de!inirea relaiilor dintre coloanele de tip re!erin i obiectele re!erite. (entru acea*ta *unt utilizate clauzele constr:linie:re+ *au constr:tabel:re+. i!erena dintre ace*te dou clauze e*te nivelul de *peci!icaie. En cazul con*tr:n)erii la nivel de tabel6 trebuie *peci!icate coloana *au atributul la care *e !ace re!erire. ,inta7a con*tr:n)erii de tip re!erin la nivel de linie e*te ur%toareaF KSCOPE IS 3schema.4tabel:domeniu L 4IT) RO4ID L 3CONSTRAINT nume:constr4 clau a:re+erire 3stare:constr4 M

34

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

8on*tr:n)erea de tip re!erin la nivel de tabel are *inta7a ur%toareF KSCOPE +OR 2 Kcol:re+ L atr:re+M 5 IS 3schema.4tabel:domeniu L RE+ 2 Kcol:re+ L atr:re+M 5 4IT) RO4ID L 3CONSTRAINT nume:constr4 +OREI-N 3E' 2 Kcol:re+ L atr:re+M 5 clau a:re+erire 3stare:constr4 M A%bele variante per%it de!inirea unei con*tr:n)eri re!eritoare laF do%eniul atributului *au coloanei re!erin re*pectiveG *tocarea valorilor re!erin 0%preun cu identi!icatorul de linieG inte)ritatea re!erenial a unei coloane de tip />G. En cadrul unei *peci!icaii la nivel de tabel6 col:re+ reprezint un nu%e de coloan de tip re!erin din tabelul obiect *au relaional creat6 iar atr:re+ *peci!ic un atribut de tip re!erin inte)rat 0n cadrul unei coloane obiect a tabelului relaional. 8oloana re!erin e*te con*iderat de tip utilizator dac do%eniul ace*teia e*te un tabel obiect care are identi!icatorii obiect bazai pe c1eie pri%ar. Entr@un tabel cu o coloan de tip re!erin6 !iecare valoare *tocat poate re!eri o linie dintr@un tabel obiect oarecare 2inclu*iv tabelul obiect curent5. 8lauza SCO3> re*tricioneaz do%eniul re!erinelor la un *in)ur tabel obiect *peci!icat 2 tabel:domeniu5. ;alorile din coloana *au atributul de tip />G *unt corelate cu obiecte din tabelul do%eniu6 tabel 0n care *unt *tocate in*tane obiect de acelai tip cu cel al coloanei re*pective. #abelul *peci!icat ca do%eniu trebuie * !ac parte din propria *c1e% *au trebuie deinut !ie privile)iul obiect S>)>C? a*upra tabelului6 !ie privile)iul *i*te% S>)>C? 01@ ?0*)>. (entru o coloan de tip />G nu poate !i *peci!icat dec:t un *in)ur tabel do%eniu. 9e*triciile a*upra con*tr:n)erilor de tip SCO3> *untF nu *e poate adu)a o con*tr:n)ere de do%eniu unei coloane e7i*tente dec:t dac tabelul creat e*te vidG nu *e poate *peci!ica o con*tr:n)ere de do%eniu pentru ele%entele unei coloane de tip vectorG e*te obli)atorie *peci!icarea unei clauze de do%eniu atunci c:nd co%anda de creare a tabelului conine o *ubcerere ce returneaz re!erine de!inite de utilizatorG nu e*te per%i* *upri%area ulterioar a unei con*tr:n)eri de do%eniu. 8lauza AI?E /OAI. *e !olo*ete pentru a *toca 0n cadrul coloanei *au atributului re*pectiv6 pe l:n) valoarea re!erin propriu@zi*6 identi!icatorul de linie al obiectului re!erit. Ace*t lucru poate 0%bunti per!or%anele operaiei de dere!ereniere6 dar utilizeaz %ai %ult *paiu de *tocare. Opiunea i%plicit e*te *tocarea !r identi!icatori de linie. 9e*triciile a*upra con*tr:n)erii AI?E /OAI. *untF nu *e poate de!ini pentru ele%entele de tip re!erin ale unui vectorG nu poate !i eli%inat ulterior printr@o co%and 0)?>/ ?0*)>G e*te i)norat dac e7i*t deja o con*tr:n)ere de do%eniu a*upra coloanei *au atributului re*pectiv. 8lauza />G>/>1C>S coninut 0n opiunea clau a:re+erire per%ite de!inirea c1eilor e7terne a*upra coloanelor de tip />G. (e l:n) %eninerea inte)ritii re!ereniale6 acea*t clauz re*tricioneaz 0n %od i%plicit do%eniul coloanei *au atributului re!erin la tabelul obiect *peci!icat. O con*tr:n)ere de c1eie e7tern a*upra unei coloane relaionale re!er o alt coloan relaional din tabelul HprinteI. i!erena dintre abordarea relaional i cea obiectual e*te c o con*tr:n)ere de

Orientare pe obiecte n Oracle9i

3"

c1eie e7tern a*upra unei coloane de tip />G !ace re!erire la coloana tabelului printe ce conine identi!icatorul obiect core*punztor. ,i%ilar tabelelor relaionale6 con*tr:n)erea la nivel de coloan utilizeaz clauza />G>/>1C>S6 iar cea la nivel de tabel nece*it 0n plu* cuvintele c1eie GO/>I#1 F>@ i una *au %ai %ulte coloane *au atribute a*upra crora *e !i7eaz con*tr:n)erea re*pectiv. 9e*triciile relative la con*tr:n)erile de inte)ritate re!erenial a*upra coloanelor de tip />G *untF la de!inirea unei con*tr:n)eri de inte)ritate re!erenial a*upra unei coloane de tip />G *e adau) auto%at o con*tr:n)ere de tip SCO3> !r do%eniu 2toate re*triciile care *e aplic con*tr:n)erilor de do%eniu *e aplic i 0n ace*t caz5G nu *e poate *peci!ica o coloan dup nu%ele obiectului din clauza />G>/>1C>S. E0e1pl25 , *e creeze un tabel care * !ac le)tura 0ntre tabelele tab:artisti i tab:adrese de!inite anterior. Noul tabel6 tab:adrese:artisti6 va conine trei coloaneF tip6 care *peci!ic dac adre*a e*te per%anent *au te%porarG artist6 care re!er un obiect de tip t:artist din tabelul tab:artisti i a*upra creia e*te i%pu* o con*tr:n)ere de c1eie e7ternG adresa6 care re!er un obiect de tip t:adresa din tabelul tab:adrese. A*upra coloanei artist *e i%pune o con*tr:n)ere de inte)ritate re!erenial6 iar a*upra coloanei adresa o con*tr:n)ere de do%eniu. (entru corectitudine6 iniial *e eli%in coloana adresa din cadrul tipului t:artist.
A0TER TYPE t_artist /ROP ATTR5B-TE a)resa CASCA/E% CREATE TAB0E ta#_a)rese_artisti ( tip VARCHAR2(20) CHECG (tip 5, (6TE.P6, 6PER.6)), artist RE1 t_artist RE1ERE,CES ta#_artisti, a)resa RE1 t_a)resa SCOPE 5S ta#_a)rese)%

8lauza stare:constr *e re!er la *tarea con*tr:n)erii la %o%entul crerii tabelului 2activ6 inactiv6 a%:nat6 i%ediat etc.56 *tare ce poate !i %odi!icat ulterior cu o co%and 0)?>/ ?0*)>. (roprietile coloanelor de tip vector 2proprieti:colecie5 *e pot *peci!ica prin inter%ediul ur%toarelor opiuniF ,ARRA' elem:6ector Kclau a:col:substituibil L STORE AS LOB Knumesegment:)O* 2parametri:)O*5 L numesegment:)O* L 2parametri:)O*5 M M Ace*te clauze per%it *peci!icarea unor caracteri*tici de *tocare *eparate pentru obiectul de tip )O* 0n care va !i *tocat vectorul. ac elem:6ector e*te o colecie pe %ai %ulte niveluri6 atunci toate co%ponentele coleciei i%bricate din ele%entul *peci!icat *unt *tocate 0n cadrul aceluiai obiect )O*. 8lauza &0//0@ per%ite *peci!icarea caracteri*ticilor de *tocare a*ociate *e)%entelor de date )O* ale vectorului6 la %ai %ulte niveluriF )lobal6 la nivel de tabel6 pentru tabele nepartiionateG

3'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

a*ociate tuturor partiiilor i *ubpartiiilor6 pentru un tabel partiionat 0n care *peci!icarea caracteri*ticilor *e !ace la nivel de tabelG core*punztoare unei partiii i *ubpartiiilor ace*teia6 0n cazul unor partiii individuale ale unui tabel partiionat 2*etrile la nivel de partiie *upra*criu *etrile la nivel de tabel5G core*punztoare unei *ubpartiii6 pentru *ubpartiii individuale ale tabelului partiionat 2*etrile la nivel de *ubpartiie *upra*criu at:t *etrile la nivel de partiie c:t i pe cele la nivel de tabel5.

Opiunea S?O/> 0S )O* re*pect ur%toarele re)uliF dac di%en*iunea %a7i% a vectorului e*te %ai %ic de 4 F* i nu a !o*t dezactivat *tocarea la nivel de linie6 atunci *i*te%ul *toc1eaz vectorii 0n cadrul 0nre)i*trrii 2 inline5G dac di%en*iunea %a7i% a vectorului e*te %ai %are de 4 F* *au a !o*t dezactivat *tocarea la nivel de linie6 atunci *i*te%ul *toc1eaz vectorii 0n a!ara 0nre)i*trrii 2 out8o+8 line5. ac nu *e *peci!ic opiunea S?O/> 0S )O*6 atunci *tocarea vectorilor *e !ace 0n %od di!erit !a de alte obiecte )O*. ,tocarea *e bazeaz pe di%en*iunea %a7i% po*ibil a vectorilor 2adic nu%rul de ele%ente 0n%ulit cu di%en*iunea ace*tora6 plu* o cantitate pentru in!or%aia de control56 nu pe di%en*iunea real a coloanei de tip vector. (ot aprea ur%toarele cazuriF di%en*iunea %a7i% a vectorului e*te %ai %ic dec:t 4 F* i atunci vectorul e*te *tocat inline *ub !or%a unor date ne*tructurateG di%en*iunea %a7i% e*te %ai %are de 4 F* i atunci vectorul e*te *tocat ca )O* 2dac di%eniunea real e*te %ai %ic de 4 F*6 atunci e*te *tocat ca )O* 0n cadrul liniei6 0n caz contrar6 vectorul !iind *tocat ca )O* 0n a!ara 0nre)i*trrii6 ca i celelalte coloane de tip )O*5. (entru obiectul )O* *etat nu *e poate *peci!ica para%etrul ?0*)>S30C> 0n cadrul clauzei parametri:)O*. ,paiul tabel al obiectului )O* a*ociat unui vector e*te 0n %od i%plicit *paiul tabel din care !ace parte tabelul ce 0l conine. (roprietile coloanelor de tip tablou i%bricat *e pot *eta cu ajutorul ur%toarelor opiuniF NESTED TABLE Kelem:imbr L COL(.N*,AL(EM 3clau a:col:substituibil4 STORE AS tabel:stocare 3 2 2propr:obiect5 3propr:+i ice4 3propr:coloana4 5 4 3RET(RN AS KLOCATOR L ,AL(EM 4 Ace*te clauze per%it *peci!icarea unor caracteri*tici de *tocare *eparate pentru un tablou i%bricat 2de e7e%plu6 de!inirea unui tablou i%bricat ca tabel or)anizat pe baz de inde75. 8lauza 1>S?>. ?0*)> e*te obli)atorie atunci c:nd *e creeaz tabele ce conin coloane 2propriu@zi*e *au a*cun*e5 de tip tablou i%bricat. 8lauzele clau a:col:substituibil6 propr:obiect6 propr:+i ice i propr:cooanal din cadrul opiunilor pentru tablouri i%bricate !uncioneaz 0n acelai !el ca i pentru tabelul HprinteI. Atributul element:imbr *peci!ic nu%ele coloanei de tip tablou i%bricat *au al unui atribut tablou i%bricat al tipului obiect a*ociat tabelului. 8uv:ntul c1eie CO)<;1:&0)<> e*te !olo*it 0n cazul coleciilor pe %ai %ulte niveluri6 atunci c:nd tabloul i%bricat *au vectorul re!erit nu are nu%e. Opiunea S?O/> 0S tabel:stocare *peci!ic nu%ele tabelului care va conine liniile coloanei de tip tablou i%bricat. (entru un tabel nepartiionat6 tabelul de *tocare e*te creat 0n aceeai *c1e% i 0n acelai *paiu tabel ca i tabelul HprinteI 2utiliz:nd caracteri*ticile de *tocare i%plicite5. ac

Orientare pe obiecte n Oracle9i

3)

tabelul HprinteI e*te partiionat6 atunci tabelul de *tocare e*te creat 0n *paiul tabel i%plicit al *c1e%ei. A*upra tabelului de *tocare e7i*t ur%toarele re*triciiF nu *e poate partiiona un tabel de *tocare al unui tablou i%bricatG nu *e pot e7ecuta co%enzi de intero)are *au prelucrare a datelor dintr@un tabel de *tocare 0n %od direct6 dar *e pot *c1i%ba caracteri*ticile de *tocare ale ace*tuia6 prin co%anda 0)?>/ ?0*)>. 8lauza />?</1 0S *peci!ic tipul rezultatului returnat de cererile a*upra coloanei de tip tablou i%bricat. &7i*t dou opiuniF &0)<>6 care per%ite returnarea unei copii a tabloului i%bricat *tocat 0n cadrul coloanei re!erite de clauza 1>S?>. ?0*)>G )OC0?O/6 care per%ite obinerea unei adre*e 2locator5 ctre valoarea propriu@zi* a tabloului i%bricat7. ac nu *e *peci!ic opiunea propr:+i ice6 ce indic atributele *e)%entelor de date6 %odul de or)anizare a tabelului *au utilizarea unei )rupri6 atunci tabloul de *tocare e*te creat utiliz:nd caracteri*ticile de *tocare i%plicite. A*upra clauzei 1>S?>. ?0*)> e7i*t ur%toarele re*triciiF nu *e poate *peci!ica pentru un tabel te%porar 2un tabel te%porar nu poate conine coloane de tip colecie5G nu *e pot *peci!ica 0n cadrul aceleiai co%enzi clauzele 1>S?>. ?0*)> i O*5>C? I.>1?IGI>/G nu *e poate *peci!ica para%etrul ?0*)>S30C> pentru un tablou i%bricat6 el !iind acelai cu cel al tabelului HprinteIG nu *e poate *peci!ica o con*tr:n)ere re!erenial a*upra atributelor tabloului i%bricat la %o%entul crerii6 dar e*te po*ibil %odi!icarea ulterioar a*upra tabelului HprinteI pentru adu)area unei a*t!el de con*tr:n)eri. eclanatorii a*upra unui tabel obiect *e de!ine*c *i%ilar celor a*ociai tabelelor obinuite. Nu e7i*t re*tricii *peciale a*upra utilizrii tipurilor obiect 0n cadrul declanatorilor. Nu *e pot de!ini declanatori pentru un tabel de *tocare core*punztor coloanelor *au atributelor de tip tablou i%bricat. e a*e%enea6 nu e*te per%i* %odi!icarea valorilor de tip )O* 0n corpul declanatorilor. E0e1pl27 , *e creeze un declanator a*upra tabelului obiect opere:de:arta de!init anterior. Ace*t declanator in*ereaz o nou 0nre)i*trare 0n tabelul cumparari6 pentru !iecare oper de art cu%prat. , *e in*ereze o 0nre)i*trare i * *e con*tate e!ectul declanatorului.
CREATE OR REP0ACE TR577ER t_ai_"n_"pere A1TER 5,SERT O, "pere_)e_arta 1OR EACH RO? BE75, 5,SERT 5,TO (umparari VA0-ES (t_"pera_)e_arta(I,E?=(")_"pera,I,E?=tip, I,E?=tit u, ,-00, I,E?=)ata_(rearii, I,E?=)ata_a(3i4itiei, I,E?=$a "are,I,E?=p" ite,I,E?=)imensiuni), /E1A-0T, I,E?=$a "are, 6Van4at"r imp i(it6)%
7

=ocatorul e*te propriu unei *e*iuni i nu poate !i reutilizat de la o *e*iune la alta. ,pre deo*ebire de un locator al unui )O*6 locatorii coleciilor nu pot !i utilizai pentru %odi!icarea in*tanei re*pective.

3,

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

E,/% & 5,SERT 5,TO "pere_)e_arta ((")_"pera, tip, tit u) VA0-ES (2, 6tip_*i(ti$6, 6tit u_*i(ti$6)% SE0ECT H 1RO. (umparari%

ac re)*irea unei coloane 0ntr@o operaie relaional e*te deter%ini*t i poate !i !cut de ctre *i*te%6 atunci S2) per%ite o%iterea pre!i7rii ace*teia cu nu%ele tabelului. E0e1pl27 , *e )*ea*c toate operele de art care au !o*t evaluate e7act la valoarea la care au !o*t ac1iziionate 2coloana 6aloare !ace parte din tabelul opere:de:arta6 iar pret din tabelul cumparari5.
SE0ECT (")_"pera, tit 1RO. "pere_)e_arta ?HERE EF5STS (SE0ECT 1RO. ?HERE u, tip 6F6 (umparari $a "are A pret)%

,i*te%ul deter%in crui tabel 0i aparine !iecare coloan 2 cod:opera6 titlu6 tip6 6aloare tabelului opere:de:arta6 iar pret tabelului cumparari5. +tiliz:nd notaia cu punct6 *e pot pre!i7a nu%ele de coloane cu nu%e de tabele *au de alias@ uri6 ceea ce !ace codul %ai e7plicit i %ai uor de 0ntreinut.
SE0ECT (")_"pera, tit u, tip 1RO. "pere_)e_arta ?HERE EF5STS(SE0ECT 6F6 1RO. (umparari ?HERE "pere_)e_arta=$a "are A (umparari=pret)% SE0ECT (")_"pera, tit u, tip 1RO. "pere_)e_arta ")a ?HERE EF5STS (SE0ECT 6F6 1RO. (umparari ( ?HERE ")a=$a "are A (=pret)%

(e l:n) !aptul c6 0n unele cazuri6 *peci!icarea unui alias e*te obli)atorie6 utilizarea nu%elor necali!icate poate )enera proble%e. ac6 de e7e%plu6 *e adau) o nou coloan6 6aloare6 0n cadrul tabelului cumparari i nu *e *c1i%b cererea de %ai *u* 2cea 0n care nu *e pre!i7eaz nici o coloan56 *i*te%ul reco%pileaz auto%at intero)area a*t!el 0nc:t *ubcererea va !olo*i noua coloan 6aloare din tabelul cumparari. (entru evitarea unor a*t!el de *ituaii i a proble%elor *i%ilare de rezolvare a re!erinelor6 e*te reco%andat utilizarea unui alias de tabel pentru a pre!i7a re!erinele ctre %etodele *au atributele obiectelor6 prin notaia cu punct. 0lias@ul de tabel e*te opional dac re!erirea atributelor ter%inale ale unui tabel obiect *e !ace 0n %od direct6 !r notaia cu punct. E0e1pl27 +r%toarele cereri indic %odaliti corecte *au incorecte de re!erire ale atributului nume. #abelul tab:artisti e*te un tabel obiect de tip t:artist6 iar tabelul opere:de:arta e*te un tabel relaional ce conine o coloan obiect de tip t:artist.
SE0ECT SE0ECT SE0ECT 1RO. nume 1RO. ta#_artisti% artist=nume 1RO. "pere_)e_arta% "pere_)e_arta=artist=nume "pere_)e_arta% >>C"re(t >>5n("re(t >>5n("re(t

Orientare pe obiecte n Oracle9i SE0ECT ")a=artist=nume 1RO. "pere_)e_arta ")a% >>C"re(t

30

En pri%a co%and6 nume e*te o coloan din tab:artisti. &a re!er atributul ter%inal core*punztor 0n %od direct6 !r * utilizeze notaia cu punct6 a*t!el 0nc:t nu e*te nece*ar un alias de tabel. En cea de@a doua co%and6 nume e*te un atribut al obiectului de tip t:artist *tocat 0n coloana artist. Acea*t re!erin utilizeaz notaia cu punct i nece*it un alias de tabel pentru a !i corect. 8ea de@a treia co%and utilizeaz nu%ele tabelului pentru a pre!i7a coloana. Ace*t lucru nu e*te per%i*6 trebuie *peci!icat alias@ul tabelului aa cu% e*te e7e%pli!icat 0n ulti%a cerere. O re!erin ctre atributul *au %etoda unui obiect trebuie pre!i7at cu un alias de tabel i nu cu nu%ele tabelului6 c1iar dac ace*ta e*te la r:ndul lui pre!i7at de nu%ele *c1e%ei 2 utili ator.tabel5. Acelai lucru *e aplic i la acce*area atributelor de tip re!erin. e e7e%plu6 e7pre*ia student.cumparari.opera.6aloare *e re!er la *c1e%a student6 tabelul cumparari6 coloana opera i atributul 6aloare al ace*tei coloane. &7pre*ia e*te totui incorect din cauz c e*te !olo*it direct nu%ele tabelului cumparari i nu un alias al ace*tuia.

3.". &etode
Metodele *unt !uncii *au proceduri declarate 0n cadrul de!iniiei unui tip obiect pentru i%ple%entarea co%porta%entului obiectelor de acel tip. O aplicaie interacioneaz cu un obiect prin inter%ediul %etodelor de!inite de tipul ace*tuia. e e7e%plu6 0n cadrul tipului obiect t:sala *e poate declara o %etod suma:6aloare25 pentru a calcula valoarea total a operelor dintr@o anu%it *al a %uzeului. Apelarea ace*tei %etode relativ la o in*tan a tipului6 6:sala6 *e poate !ace prin inter%ediul e7pre*iei 6:sala.suma:6aloare25. Metodele pot !i *cri*e 0n 3)4S2) *au 0n alt li%baj de pro)ra%are acceptat de baza de date Oracle. 8ele *cri*e 0n 3)4S2) *au 5a6a *unt *tocate 0n baza de date6 iar cele *cri*e 0n alte li%baje de pro)ra%are6 cu% ar !i C6 *unt *tocate e7tern. En de!iniia unui tip pot !i declarate %etode ;>;*>/ i *tatice. Metodele ;>;*>/ pot !i %etode obinuite *au !uncii de ordonare. e a*e%enea6 pentru !iecare tip obiect6 *i*te%ul de!inete auto%at o %etod con*tructor. 8on*tructorul unui tip e*te utilizat pentru crearea obiectelor de tipul re*pectiv.

6e%inirea (etodelor
(entru i%ple%entarea %etodelor unui tip obiect *e utilizeaz co%anda C/>0?> ?@3> *O.@. (rin inter%ediul ace*tei co%enzi trebuie *peci!icat codul a*ociat tuturor %etodelor declarate 0n co%anda C/>0?> ?@3>,. (entru a crea *au 0nlocui corpul unui tip din propria *c1e% *unt nece*are privile)iile *i*te% C/>0?> ?@3> *au C/>0?> 01@ ?@3>. (entru a crea corpul unui tip din *c1e%a altui utilizator trebuie deinut privile)iul *i*te% C/>0?> 01@ ?@3>6 iar pentru a 0nlocui corpul unui a*t!el de tip trebuie avut i privile)iul *i*te% ./O3 01@ ?@3>. 8o%anda are ur%toarea *inta7F CREATE 3OR REPLACE4 T'PE BOD' 3schema.4nume:tip KIS L ASM K.E.BER L STATICMKdeclar:proc L decl:+uncie L decl:constrM 3 K.E.BER I STATICMKdeclar:proc L decl:+uncie L decl:constrMB4
'

ac e*te creat un tip S2)5 pentru care %etodele *unt de!inite 0n cla*a 5a6a a*ociat6 atunci nu e*te nece*ar co%anda C/>0?> ?@3> *O.@. Acelai lucru e*te valabil i pentru %etodele care *unt declarate ca proceduri *au !uncii e7terne.

41

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

3 K.AP L ORDERM .E.BER decl:+uncie4 ENDG (entru a *c1i%ba de!iniia corpului unui tip obiect !r a@l *upri%a i crea din nou6 *e utilizeaz opiunea O/ />3)0C>. +n avantaj al ace*tei abordri e*te c utilizatorii crora li *@au acordat anu%ite privile)ii a*upra corpului recreat pot utiliza 0n continuare tipul !r a !i nece*ar reacordarea privile)iilor. e a*e%enea6 clauza O/ />3)0C> e*te utilizat atunci c:nd *e i%ple%enteaz de!iniia unei noi %etode ;>;*>/ adu)at prin inter%ediul co%enzii 0)?>/ ?@3>B/>3)0C>. ac *e o%ite nu%ele *c1e%ei6 atunci *i*te%ul creeaz corpul tipului 0n *c1e%a curent. Nu e*te per%i* de!inirea corpului unui tip pentru care nu a !o*t creat *peci!icaia. En cadrul unui tip *e poate de!ini !ie o %etod de tip ;036 !ie una de tip O/.>/. En ace*t !el e*te po*ibil co%pararea in*tanelor tipului obiect re*pectiv6 0n cadrul co%enzilor S2). ac nu e*te declarat nici una dintre %etodele de ordonare6 atunci *e poate veri!ica doar e)alitatea a dou obiecte de acel tip. Opiunile ;>;*>/ *au S?0?IC *peci!ic tipul %etodei i%ple%entate6 care poate !i procedur6 !uncie *au con*tructor. ,inta7a core*punztoare celor trei tipuri de %etode e*teF PROCED(RE nume:proc 2 3parametru tip:de:dateB4 5 KIS L ASM Kbloc:3)S2) L speci+icaie:apelM +(NCTION nume:+uncie 2 3parametru tip:de:dateB4 5 RET(RN tip:de:date KIS L ASM Kbloc:3)S2) L speci+icaie:apelM 3+INAL4 3INSTANTIABLE4 CONSTR(CTOR +(NCTION tip:obiect 3 2 3SEL+ IN O(T tip:obiect64 parametru tip:de:date 36 parametru tip:de:dateB4 5 4 RET(RN SEL+ AS RES(LT KIS L ASM Kbloc:3)S2) L speci+icaie:apelM (entru !iecare %etod trebuie *peci!icate un nu%e6 o li*t opional de para%etri6 iar 0n cazul !unciilor6 un tip de date returnat. Antetul %etodei trebuie * core*pund celui din *peci!icaia tipului obiect de!init. ac pentru i%ple%entarea %etodei nu e*te !olo*it un bloc 3)4S2)6 atunci trebuie de!init o *peci!icaie de apel care !ace a*ocierea dintre o %etod i o cla* 5a6a *au *tructur C.

&etode .E.BER
Metodele ;>;*>/ reprezint %odalitatea prin care o aplicaie acce*eaz datele unei in*tane obiect. En cadrul tipului obiect e*te po*ibil i%ple%entarea c:te unei %etode pentru !iecare operaie care poate !i e7ecutat a*upra obiectelor de tipul re*pectiv. E0e1pl27 , *e de!inea*c o %etod ;>;*>/6 get:titlu256 care acce*eaz in!or%aiile de*pre o anu%it oper de art i returneaz titlul ace*teia.
CREATE OR REP0ACE TYPE BO/Y t_"pera_)e_arta AS .E.BER 1-,CT5O, 'et_tit u RET-R, VARCHAR2 5S

Orientare pe obiecte n Oracle9i BE75, RET-R, SE01=tit u% E,/ 'et_tit u% E,/% & SE0ECT "='et_tit u() 1RO. "pere "%

41

Orice %etod are un para%etru prede!init S>)G care identi!ic in*tana obiect a*upra creia e*te invocat %etoda la un %o%ent dat. (entru *i%plitate6 %etodele ;>;*>/ pot re!eri atributele i %etodele para%etrului S>)G !r cali!icativ 2de e7e%plu6 S>)G.titlu *au titlu au aceeai valoare5. Nu e*te obli)atoriu ca para%etrul S>)G * !ie declarat 0n %od e7plicit6 dar dac e*te declarat6 el trebuie * !ie pri%ul para%etru tran*%i* %etodei. ac para%etrul S>)G nu e*te declarat6 0n !unciile ;>;*>/ el e*te con*iderat 0n %od i%plicit de tip I16 iar 0n procedurile ;>;*>/ de tip I1 O<?. O %etod *e invoc utiliz:nd notaia cu punct 2 obiect.metoda255. (re!i7ul notaiei *peci!ic obiectul a*upra cruia *e invoc %etoda. (arantezele *unt obli)atorii c1iar dac %etoda nu are para%etri. E0e1pl27 , *e de!inea*c tipul t:compleC care %odeleaz nu%erele co%ple7e. Ace*ta conine atributele real i imaginar de tip nu%eric i %etode ce i%ple%enteaz calculul %odulului unui nu%r co%ple76 al *u%ei i produ*ului a dou nu%ere co%ple7e.
PRO.PT (rearea tipu ui t_("mp eE CREATE TYPE t_("mp eE AS OBJECT ( rea ,-.BER, ima'inar ,-.BER, .E.BER 1-,CT5O, m")u RET-R, ,-.BER, .E.BER 1-,CT5O, a)unare(p_"# t_("mp eE) RET-R, t_("mp eE, .E.BER 1-,CT5O, inmu tit(p_"# t_("mp eE) RET-R, t_("mp eE)% & PRO.PT (rearea ("rpu ui tipu ui t_("mp eE CREATE OR REP0ACE TYPE BO/Y t_("mp eE AS .E.BER 1-,CT5O, m")u RET-R, ,-.BER 5S $_re4u tat ,-.BER% BE75, $_re4u tat IA SMRT (SE01=rea H SE01=rea ) N SMRT (SE01=ima'inar H SE01=ima'inar)% >> e(3i$a ent (u inia pre(e)enta $_re4u tat IA SMRT (rea H rea ) N SMRT (ima'inar H ima'inar)% RET-R, $_re4u tat% E,/ m")u % .E.BER 1-,CT5O, a)unare(p_"# t_("mp eE) RET-R, t_("mp eE 5S $_re4u tat t_("mp eE% BE75, $_re4u tat IA t_("mp eE (SE01=rea N p_"#=rea , SE01=ima'inar N p_"#=ima'inar)% >> e(3i$a ent (u inia pre(e)enta $_re4u tat IA t_("mp eE (rea N p_"#=rea , ima'inar N p_"#=ima'inar)% RET-R, $_re4u tat%

42

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

E,/ a)unare% .E.BER 1-,CT5O, inmu tit(p_"# t_("mp eE) RET-R, t_("mp eE 5S $_re4u tat t_("mp eE% $_rea ,-.BER% $_ima'inar ,-.BER% BE75, $_rea IA rea H p_"#=rea > ima'inar H p_"#=ima'inar% $_ima'inar IA rea H p_"#=ima'inar N ima'inar H p_"#=rea % $_re4u tat IA t_("mp eE ($_rea , $_ima'inar)% RET-R, $_re4u tat% E,/ inmu tit% E,/% & PRO.PT instantierea "#ie(tu ui si ape area met")e "r SET SERVERO-TP-T O, SET VER51Y O11 /EC0ARE $ar2 t_("mp eE IA t_("mp eE (OO'_rea , OO'_ima'inar)% $ar2 t_("mp eE IA t_("mp eE (O'_rea , >O'_ima'inar)% $_a t_("mp eE% >> pentru suma $_i t_("mp eE% >> pentru pr")us BE75, /B.S_O-TP-T=P-T_05,E (6$ar2 A 6 CC $ar2=rea CC 6 N (6 CC $ar2=ima'inar CC 6) Hi6)% /B.S_O-TP-T=P-T_05,E (6$ar2 A 6 CC $ar2=rea CC 6 N (6 CC $ar2=ima'inar CC 6) Hi6)% $_a IA $ar2=a)unare ($ar2)% $_i IA $ar2=inmu tit ($ar2)% /B.S_O-TP-T=P-T_05,E (6$ar2 N $ar2 A 6 CC $_a=rea CC 6 N (6 CC $_a=ima'inar CC 6) Hi6)% /B.S_O-TP-T=P-T_05,E (6$ar2 H $ar2 A 6 CC $_i=rea CC 6 N (6 CC $_i=ima'inar CC 6) Hi6)% E,/% &

&etode pentru co(pararea obiectelor


;alorile unui tip de date *calar au o ordine prede!init care per%ite !olo*irea ace*tora 0n co%paraii. +n tip obiect cu o *tructur co%ple7 i neuni!or%6 !or%at din %ai %ulte atribute cu tipuri de date di!erite6 nu are o re)ul prede!init de co%parare. (entru a putea ordona i co%para variabile de tip obiect trebuie *peci!icat o re)ul de co%parare. En ace*t *en*6 e7i*t dou tipuri de %etode ;>;*>/ ce pot !i de!initeF %etode de %apare 2de tip ;035G %etode de ordonare 2de tip O/.>/5. O %etod de tip ;03 per%ite co%pararea obiectelor prin a*ocierea dintre o in*tan obiect i o valoare *calar 2de e7e%plu6 de tip .0?>6 &0/CE0/26 1<;*>/6 CE0/6 />0)5. 8lauza ;03 ;>;*>/ din co%enzile C/>0?> ?@3> i C/>0?> ?@3> *O.@ per%ite i%ple%entarea unei !uncii ;>;*>/ de tip ;03 care returneaz poziia relativ a unei in*tanei date 0n do%eniul ordonat al tuturor in*tanelor tipului obiect re*pectiv. O a*t!el de %etod e*te apelat 0n %od i%plicit de *i*te% i induce o ordonare a in*tanelor obiect6 utiliz:nd ordinea prede!init a

Orientare pe obiecte n Oracle9i

43

valorilor *calare a*ociate. =i%bajul 3)4S2) utilizeaz %etodele ;03 pentru a evalua e7pre*iile de tip boolean i pentru co%paraii directe 2de tip ob:1 N ob:25 *au indirecte 2)enerate de clauzele .IS?I1C?6 #/O<3 *@ i O/.>/ *@$5. ac ar)u%entul %etodei ;03 e*te null6 atunci acea*ta returneaz valoarea null i nu %ai e*te invocat. ac ob:1 i ob:2 *unt dou obiecte ce pot !i co%parate utiliz:nd o %etod de %apare denu%it map256 atunci co%paraia ob:1 N ob:2 e*te ec1ivalent cu ob:1.map25 N ob:2.map25. O *peci!icaie a unui tip obiect poate conine o *in)ur %etod ;036 care trebuie * !ie o !uncie cu un *in)ur ar)u%ent 2para%etrul i%plicit S>)G5. #ipul rezultatului trebuie * !ie un tip *calar S2) prede!init. +n *ubtip poate *upra*crie %etoda ;03 %otenit de la *upertip. E0e1pl27 , *e de!inea*c o %etod de tip ;036 perimetru256 care i%ple%enteaz un %od de co%parare a obiectelor de tip t:dreptunghi6 utiliz:nd peri%etrul ace*tora.
CREATE TYPE t_)reptun'3i AS OBJECT ( un'ime ,-.BER, atime ,-.BER, .AP .E.BER 1-,CT5O, perimetru RET-R, ,-.BER)% & CREATE TYPE BO/Y t_)reptun'3i AS .AP .E.BER 1-,CT5O, perimetru RET-R, ,-.BER 5S BE75, RET-R, 2 H ( un'ime N atime)% E,/ perimetru% E,/% &

Metodele de tip O/.>/ per%it co%pararea direct a obiectelor. ,pre deo*ebire de %etodele de tip ;036 ele *peci!ic dac obiectul a*upra cruia *e !ace invocarea e*te %ai %ic6 e)al *au %ai %are dec:t obiectul cu care e*te co%parat6 con!or% unui criteriu pre*tabilit i i%ple%entat de %etod. +n tip obiect poate declara cel %ult o %etod de ordonare. 8lauza O/.>/ ;>;*>/ *peci!ic o !uncie %e%bru de tip O/.>/ care accept in*tana unui obiect ca ar)u%ent e7plicit6 S>)G ca ar)u%ent i%plicit i returneaz un 0ntre). 9ezultatul re!lect dac ar)u%entul i%plicit S>)G e*te %ai %ic 2rezultat ne)ativ56 e)al 2rezultat zero5 *au %ai %are 2rezultat pozitiv5 dec:t ar)u%entul e7plicit. ac ar)u%entul %etodei O/.>/ e*te null6 %etoda 0ntoarce tot null i nu e*te invocat. En cadrul unei ierar1ii de tipuri6 un *ubtip nu poate nici * declare i nici * *upra*crie o %etod de tip O/.>/. ,i%ilar %etodelor ;036 o %etod O/.>/ e*te apelat auto%at ori de c:te ori trebuie co%parate obiecte de tipul re*pectiv. e e7e%plu6 dac o coloan de tip obiect apare 0ntr@o clauz O/.>/ *@6 atunci *e invoc %etoda O/.>/. Metodele de ordonare *unt nece*are atunci c:nd *e%ni!icaia co%parrii obiectelor devine prea co%ple7 pentru a putea utiliza %etodele de %apare. e e7e%plu6 pentru co%pararea unor obiecte binare 2i%a)ini5 *e poate crea o %etod de ordonare care * ia 0n con*ideraie lu%inozitatea i nu%rul de pi7eli. E0e1pl27
$

ac tipul va !i re!erit 0n cereri ce i%plic *ortri 2printr@o clauz O/.>/ *@6 #/O<3 *@6 .IS?I1C? *au <1IO15 *au "oin@uri i *e dorete ca ace*te cereri * !ie paralelizate6 atunci e*te obli)atorie o !uncie de tip ;03.

44

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

, *e de!inea*c o %etod de ordonare care co%par artitii dup nu%ele lor. En cazul nu%elor identice6 co%pararea *e !ace dup prenu%ele ace*tora i apoi de*cre*ctor dup anul naterii. , *e veri!ice %odul de !uncionare a %etodei.
A0TER TYPE t_artist A// OR/ER .E.BER 1-,CT5O, ("mparare(a t_artist) RET-R, 5,TE7ER CASCA/E% CREATE OR REP0ACE TYPE BO/Y t_artist AS OR/ER .E.BER 1-,CT5O, ("mparare(a t_artist) RET-R, 5,TE7ER 5S $_nume_("mp et VARCHAR2(:0)% $_return 5,TE7ER% BE75, $_nume_("mp et IA nume CC 6 6 CC prenume% 51 $_nume_("mp et L a=nume CC 6 6 CC a=prenume THE, $_return IA >2% >>sau a t numar ne'ati$ E0SE 51 $_nume_("mp et @ a=nume CC 6 6 CC a=prenume THE, $_return IA 2%>> sau a t numar p"4iti$ E0SE >> a(e asi nume 51 TO_,-.BER (anu _nasterii) @ TO_,-.BER (a=anu _nasterii) THE, $_return IA >2% E0S51 TO_,-.BER (anu _nasterii) L TO_,-.BER (a=anu _nasterii) THE, $_return IA 2% E0SE $_return IA 0% E,/ 51% E,/ 51% E,/ 51% RET-R, $_return% E,/ ("mparare% E,/% & /EC0ARE $_artist2 t_artist IA t_artist (6Peter6, 6Breu'e 6, 62!+96, ,-00, ,-00, ,-00)% $_artist2 t_artist IA t_artist (6Peter6, 6Breu'e 6, 62+226, ,-00, ,-00, ,-00)% $_re4u tat 5,TE7ER% BE75, SE0ECT $_artist2=("mparare ($_artist2) 5,TO $_re4u tat 1RO. /-A0% /B.S_O-TP-T=P-T_05,E (6 Re4u tat I 6 CC $_re4u tat)% /B.S_O-TP-T=P-T_05,E (6 Re4u tat in$ers I 6 CC $_artist2=("mparare($_artist2))% E,/% &

ac *e declar una dintre %etodele de co%parare6 atunci obiectele pot !i co%parate 0n cadrul

Orientare pe obiecte n Oracle9i

4"

in*truciunilor S2) *au 0n co%enzi procedurale. ac nu *@a de!init nici una dintre %etodele de ordonare6 nu *e pot !ace co%paraii dec:t 0n S2)6 pentru a veri!ica e)alitatea a dou in*tane 2dou obiecte de acelai tip *unt e)ale dac valorile atributelor lor *unt e)ale5. Atunci c:nd *e *orteaz *au *e intercla*eaz un nu%r %are de obiecte6 e*te pre!erabil o %etod de %apare. e e7e%plu6 *e !olo*ete o %etod ;03 pentru "oin@urile care !olo*e*c !uncii de di*per*ie 2hash "oin5. En ace*t caz6 nu *e poate !olo*i o %etod O/.>/6 deoarece %ecani*%ul di*per*ional !olo*ete o valoare *calar a*ociat obiectului. Metoda ;03 *e aplic o *in)ur dat pentru a a*ocia obiectele cu nite valori *calare. (rin ur%are6 o %etod ;03 e*te %ai e!icient dec:t una O/.>/6 care poate co%para doar c:te dou obiecte la un %o%ent dat. En *c1i%b6 o %etod de ordonare poate i%ple%enta o *e%antic %ai co%ple7 a lu%ii reale.

&etode statice
O %etod *tatic i%ple%enteaz un co%porta%ent )lobal la nivel de tip6 invariabil relativ la in*tanele tipului obiect re*pectiv. &a nu nece*it re!erine la datele unei in*tane particulare. (rin ur%are6 %etoda e*te invocat relativ la tipul obiect care o de!inete i nu relativ la in*tanele ace*tuia. O %etod *tatic nu are para%etrul S>)G. .nvocarea *e !ace prin utilizarea notaiei cu punct6 pre!i7:nd apelul %etodei cu nu%ele tipului obiect a*ociat 2nume:tip.metoda255. E0e1pl27 8o%enzile ce ur%eaz prezint crearea i re!erirea unei %etode *tatice. Metoda *tatic ins a tipului tip:a in*ereaz o nou 0nre)i*trare 0n tabelul a. Enre)i*trarea e*te !or%at din dou coloane. (ri%a reprezint identi!icatorul dat ca pri% para%etru6 iar a doua are ca valoare o re!erin la obiectul linie din tabelul b6 identi!icat prin codul dat ca al doilea para%etru. Operaia nu depinde de in*tanele tipului i de aceea a !o*t declarat *tatic. 8are e*te rezultatul cereriiO
CREATE OR REP0ACE TYPE tip_# AS OBJECT (i) ,-.BER)% & CREATE OR REP0ACE TYPE tip_a AS OBJECT ( i) ,-.BER, # RE1 tip_#, STAT5C PROCE/-RE ins (p_a_i) ,-.BER, p_#_i) ,-.BER))% & CREATE TAB0E # O1 tip_#% CREATE TAB0E a O1 tip_a% CREATE OR REP0ACE TYPE BO/Y tip_a AS STAT5C PROCE/-RE ins (p_a_i) ,-.BER, p_#_i) ,-.BER) 5S BE75, 5,SERT 5,TO a SE0ECT p_a_i), RE1 (a ias) 1RO. # a ias ?HERE a ias=i) A p_#_i)% >> a iasu este "# i'at"riu pentru a *" "si RE1() E,/ ins% E,/% & 5,SERT 5,TO # VA0-ES(tip_#(2))% 5,SERT 5,TO # VA0-ES(tip_#(2))%

4'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

5,SERT 5,TO # VA0-ES(tip_#(3))% EFEC tip_a=ins(2,2)% SE0ECT ta#_a=i), ta#_#=i) 1RO. a ta#_a, # ta#_# ?HERE RE1 (ta#_#) A ta#_a=#%

&etode constructor
En %od i%plicit6 !iecare tip obiect are o %etod con*tructor de!init de *i*te%6 adic o %etod prin care *e poate crea o in*tan6 *et:nd valorile atributelor ace*teia. Metoda con*tructor e*te o !uncie ce are c:te un para%etru core*punztor !iecrui atribut al tipului obiect i care returneaz o nou in*tan creat. Nu%ele %etodei con*tructor e*te acelai cu nu%ele tipului obiect. (ara%etrii lui au nu%ele i tipurile de date ale atributelor tipului obiect. Encep:nd cu Oracle9i a !o*t introdu* clauza CO1S?/<C?O/ care per%ite de!inirea con*tructorilor utilizator. =a de!inirea unui con*tructor e*te obli)atorie clauza />?</1 S>)G 0S />S<)?. Ace*t lucru indic !aptul c cel %ai *peci!ic tip al valorii returnate de con*tructor core*punde celui %ai *peci!ic tip al ar)u%entului S>)G. /uncia con*tructor trebuie * conin o co%and />?</1 *i%pl care nu *peci!ic e7plicit valoarea returnat. En ace*t !el6 0n %od i%plicit6 *i*te%ul returneaz noua in*tan S>)G de!init de con*tructorul re*pectiv. +n con*tructor de!init de utilizator nu poate !i utilizat 0n cadrul clauzei .>G0<)? dintr@o co%and C/>0?> ?0*)> *au 0)?>/ ?0*)>6 dei %etodele con*tructor i%plicite *unt per%i*e. En S2)6 parantezele *unt nece*are c1iar i pentru con*tructorii care nu au ar)u%ente6 0n ti%p ce 0n 3)4S2) ace*tea *unt opionale. (entru a !i 0n concordan cu li%bajele orientate pe obiecte e7i*tente6 a !o*t introdu* cuv:ntul c1eie 1>A. Ace*ta6 0n*6 nu e*te obli)atoriu. E0e1pl25 a5 , *e de!inea*c un tip t:organi ator care * conin atributele cod6 nume6 tele+on i adresa. , *e i%ple%enteze un con*tructor care per%ite *peci!icarea doar a codului i nu%elui or)anizatorului. , *e creeze un bloc 3)4S2) 0n care * *e utilizeze a%bii con*tructori 2i%plicit i de!init de utilizator5.
CREATE OR REP0ACE TYPE t_"r'ani4at"r AS OBJECT ( (") ,-.BER, nume VARCHAR2(20), te e*"n VARCHAR2(30), a)resa t_a)resa, CO,STR-CTOR 1-,CT5O, t_"r'ani4at"r ( p_(") ,-.BER, p_nume VARCHAR2) RET-R, SE01 AS RES-0T)% & CREATE OR REP0ACE TYPE BO/Y t_"r'ani4at"r AS CO,STR-CTOR 1-,CT5O, t_"r'ani4at"r ( p_(") ,-.BER, p_nume VARCHAR2) RET-R, SE01 AS RES-0T 5S BE75, SE01=te e*"n IA 6223!+:96% SE01=a)resa IA t_a)resa (>2, 6ni(i " stra)a6, ,-00, ,-00, ,-00, ,-00)% RET-R,% E,/% E,/% &

Orientare pe obiecte n Oracle9i /EC0ARE $_"r'2 t_"r'ani4at"r% $_"r'2 t_"r'ani4at"r% BE75, >> ("nstru(t"r )e*init )e uti i4at"r $_"r'2 IA ,E? t_"r'ani4at"r(2, 6Titan SA6)% /B.S_O-TP-T=P-T_05,E ($_"r'2=a)resa=stra)a)% >> ("nstru(t"ru imp i(it $_"r'2 IA t_"r'ani4at"r(2, 6Arta SA6, 6092!=+23=3326, ,-00)% E,/% &

4)

b5 , *e de!inea*c tabelul obiect tab:organi atori i * *e introduc date de*pre un or)anizator av:nd adre*a precizat. Metoda con*tructor t:adresa creeaz un obiect de tipul t:adresa av:nd valorile atributelor *peci!icate ca para%etri.
CREATE TAB0E ta#_"r'ani4at"ri O1 t_"r'ani4at"r% 5,SERT 5,TO ta#_"r'ani4at"ri VA0-ES ( 2, 67e"r'es(u E ena6, 6:30=<;=0!6, t_a)resa(223, 623A ,= 7ri'"res(u6, 69!:226, 6Bu(uresti6, 6Se(t"r 36, 6R"mania6))%

3.'. -ipuri colecie


,i*te%ul Oracle *uport dou tipuri colecie per*i*tenteF vector 2 6ar=ing arra= *au 6arra=H i tablou i%bricat 2nested tableH. #ipurile colecie au %ai !o*t tratate 0n cadrul capitolului 3 din per*pectiva 3)4S2). En acea*t *eciune *unt prezentate tipurile colecie i c:teva e7e%ple din per*pectiva orientrii pe obiecte. +n vector e*te o colecie ordonat de ele%ente. (oziiile *unt inde7ate nu%eric i pot !i !olo*ite pentru acce*ul la ele%ente. i%en*iunea unui vector e*te dina%ic6 0n *en*ul c la declarare *e *peci!ic nu%rul %a7i% de ele%ente6 dar ace*ta poate !i *c1i%bat ulterior. Nu%rul de ele%ente trebuie * !ie un literal 0ntre). ;ectorii *unt *tocai ca obiecte opace6 adic de tip /0A *au *)O*. +n vector nu poate conine ele%ente de tip )O*. Acea*ta pre*upune c un vector nu poate * conin ele%ente de un tip de!init de utilizator care are atribute de tip )O*. ,e poate crea un tip vector de tip D;)?=pe care * !ie utilizat 0n 3)4S2) *au 0n cererile vizualizrilor6 dar nu *e poate crea o coloan de ace*t tip vector6 deoarece *i*te%ul *toc1eaz datele de tip D;)?=pe *ub !or% de C)O*. +n tablou i%bricat poate avea un nu%r neli%itat de ele%ente de acelai tip de date 2nu e*te *peci!icat un nu%r %a7i% 0n de!iniia tabloului56 iar ordinea ele%entelor nu e*te p*trat. &l are o *in)ur coloan de tip prede!init *au de!init de utilizator. En cazul 0n care coloana din tabloul i%bricat e*te de tip obiect6 tabloul poate !i vizualizat ca un tabel %ulticoloan6 av:nd c:te o coloan pentru !iecare atribut al tipului obiect. A*upra unui tablou i%bricat *e pot e7ecuta operaii );.6 *i%ilar celorlalte tabele ale *c1e%ei. &le%entele unui tablou i%bricat *unt coninute 0ntr@un tabel de *tocare *eparat6 care conine o coloan ce identi!ic linia *au obiectul din tabelul HprinteI din care !ace parte !iecare ele%ent. Modalitatea e*te *i%ilar tabelelor HprinteI @ HcopilI ale unei *c1e%e relaionale. ac o coloan *au atribut dintr@un tabel relaional *au obiectual e*te de tip tablou i%bricat6 atunci *i*te%ul Oracle reine 0n acelai tabel de *tocare toate valorile tabloului i%bricat din tabelul re*pectiv.

4,

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

En atribuirile dintre colecii6 *ur*a i inta trebuie * aib acelai tip de date. e a*e%enea6 obiectele ale cror tip de date *unt tipuri colecii nu pot !i co%parate. ac e*te nece*ar * *e *toc1eze doar un nu%r !i7 de ele%ente6 * *e parcur) ele%entele 0ntr@o anu%it ordine *au * *e *electeze i * *e prelucreze 0ntrea)a colecie ca un 0ntre)6 atunci *e reco%and utilizarea unui vector. (entru e!icien 0n acce*area coleciilor6 prelucrarea unui nu%r arbitrar de ele%ente *au e7ecutarea operaiilor de in*erare6 %odi!icare i *electare 0n %a*6 e*te reco%andat !olo*irea tablourile i%bricate. e a*e%enea6 tablourile i%bricate *unt utile atunci c:nd nu e7i*t o ordine pre*tabilit a ele%entelor coleciei i e*te i%portant intero)area e!icient a ele%entelor individuale. =a crearea unui tip vector *au tablou i%bricat nu *e aloc *paiu de *tocare6 ci doar *e reine de!iniia tipului6 care poate !i utilizat ulterior caF tip de date al unei coloane 0ntr@un tabel relaionalG atribut al unui tip obiectG tip de date al unei variabile 3)4S2)6 para%etru *au valoare returnat de o !uncie. E0e1pl27 a5 , *e creeze un tip vector t:preturi care conine cel %ult 1- preuri ce pot !i ataate unei opere de art.
CREATE TYPE t_preturi AS VARRAY(20) O1 ,-.BER(22, 2)% &

b5 , *e creeze un tip tablou i%bricat cu ele%ente de tip t:adresa. #ipul va !i utilizat pentru *tocarea coleciei de adre*e a or)anizatorilor.
CREATE TYPE t_a)rese_ti AS TAB0E O1 t_a)resa% &

c5 , *e 0nlocuia*c coloana adresa de tip t:adresa a tabelului obiect tab:organi atori6 cu o coloan adrese de tip t:adrese:ti care * conin %ai %ulte adre*e ale unui or)anizator. =a crearea tabelului tab:organi atori trebuie *peci!icat tabelul de *tocare 2 tstoc:adrese5 a*ociat atributului adrese. Ace*t tabel core*punde tuturor obiectelor de tip t:organi ator *tocate 0n cadrul tabelului obiect.
A0TER TYPE t_"r'ani4at"r /ROP ATTR5B-TE a)resa CASCA/E% A0TER TYPE t_"r'ani4at"r A// ATTR5B-TE a)rese t_a)rese_ti CASCA/E% /ROP TAB0E ta#_"r'ani4at"ri% CREATE TAB0E ta#_"r'ani4at"ri O1 t_"r'ani4at"r ,ESTE/ TAB0E a)rese STORE AS tst"(_a)rese%

O %odalitate convenabil de acce*are a ele%entelor unui tablou i%bricat 0n %od individual e*te !urnizat de un cur*or i%bricat 2e7pre*ie C</SO/5. En ace*t !el6 valoarea unei coloane de tip colecie poate !i tran*%i* ca ar)u%ent de tip />G C</SO/ unui *ubpro)ra% 3)4S2). E0e1pl27 , *e li*teze nu%ele !iecrui or)anizator i adre*ele ace*tuia !olo*ind o e7pre*ie C</SO/.
SE0ECT "=nume, C-RSOR (SE0ECT H 1RO. TAB0E ("=a)rese)) 1RO. ta#_"r'ani4at"ri "%

Orientare pe obiecte n Oracle9i

40

-ipuri colecie pe (ai (ulte niveluri


+n tip colecie pe %ai %ulte niveluri e*te un tip colecie cu ele%ente care *unt6 0n %od direct *au indirect6 tipuri colecie. 8a i tipurile colecie pe un *in)ur nivel6 ace*tea pot !i utilizate ca tipuri de date ale coloanelor 0ntr@un tabel relaional6 ale atributelor unui obiect 0ntr@un tabel obiect *au ale variabilelor 3)4S2). Nu%rul nivelurilor po*ibile de i%bricare e*te li%itat doar de capacitatea de *tocare a *i*te%ului. E0e1pl27 , *e de!inea*c un tablou i%bricat de tablouri i%bricate ce %odeleaz un *i*te% *olar 0n care !iecare *tea are a*ociat o %uli%e de planete ce )raviteaz 0n jurul ei6 iar !iecare planet are o %uli%e de *atelii 23"345.
CREATE TYPE t_sate it AS OBJECT ( nume VARCHAR2(20), )iametru ,-.BER)% & CREATE TYPE t_sate iti_ti AS TAB0E O1 t_sate it% & CREATE TYPE t_p aneta AS OBJECT ( nume VARCHAR2(20), masa ,-.BER, sate iti t_sate iti_ti)% & CREATE TYPE t_p anete_ti AS TAB0E O1 t_p aneta% &

O coloan *au un atribut al unui tabel obiect de tip tablou i%bricat nece*it *peci!icarea unui tabel de *tocare unde * poat !i depu*e valorile core*punztoare tuturor tablourilor i%bricate din coloana *au atributul re*pectiv. En %od *i%ilar6 o colecie de tablouri i%bricate pe %ai %ulte niveluri nece*it c:te un tabel de *tocare *peci!icat at:t pentru *etul interior de tablouri i%bricate6 c:t i pentru cel e7terior. En con*ecin6 pentru !iecare atribut de tip tablou i%bricat de pe un anu%it nivel al coleciei trebuie *peci!icat c:te o clauz de *tocare *eparat. E0e1pl27 , *e creeze un tabel 2stele56 care conine o coloan denu%it planete ce *toc1eaz colecia de planete a*ociate !iecrei *tele 2tipul tablou i%bricat t:planete:ti5. =a nivel de tabel trebuie *peci!icate clauze de *tocare *eparate at:t pentru tabloul i%bricat e7terior planete6 c:t i pentru cel interior sateliti.
CREATE TAB0E ste e ( nume VARCHAR2(20), $arsta ,-.BER, p anete t_p anete_ti) ,ESTE/ TAB0E p anete STORE AS tst"(_p anete (,ESTE/ TAB0E sate iti STORE AS tst"(_sate iti)%

&7e%plul precedent poate !ace re!erire la tabloul i%bricat interior 2 sateliti5 prin nu%e6 deoarece ace*ta e*te un atribut al obiectului planete. ac tabloul i%bricat interior nu e*te un atribut al unui obiect i nu are nu%e6 atunci pentru a re!eri nu%ele ace*tui tablou *e !olo*ete cuv:ntul c1eie CO)<;1:&0)<>.

"1
E0e1pl27

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

CREATE TYPE t_numere_ti AS TAB0E O1 ,-.BER% & CREATE TYPE t_siruri_ti AS TAB0E O1 t_numere_ti% & CREATE TAB0E ta# ( )ata /ATE, re4u tat t_siruri_ti) ,ESTE/ TAB0E re4u tat STORE AS tst"(_re4u tat (,ESTE/ TAB0E CO0-.,_VA0-E STORE AS tst"(_(" $a )%

E0e1pl27 , *e *peci!ice atributele !izice pentru tabelele de *tocare a*ociate coloanelor de tip colecie planete i sateliti6 utiliz:nd clauza 1>S?>. ?0*)>.
/ROP TAB0E ste e% CREATE TAB0E ste e ( nume VARCHAR2(20), $arsta ,-.BER, p anete t_p anete_ti) ,ESTE/ TAB0E p anete STORE AS tst"(_p anete ((PR5.ARY GEY (,ESTE/_TAB0E_5/, nume)) OR7A,5PAT5O, 5,/EF CO.PRESS ,ESTE/ TAB0E sate iti STORE AS tst"(_sate iti)%

/iecare tabel de *tocare al unui tablou i%bricat conine o coloan6 re!erit prin 1>S?>.:?0*)>:I.6 care returneaz c1eia 0nre)i*trrii core*punztoare liniei a*ociate din tabelul HprinteI. ac un tabel HprinteI e*te la r:ndul lui tablou i%bricat 2de e7e%plu planete5 atunci el conine dou coloane de tip identi!icator )enerate de *i*te%F una6 re!erit prin 1>S?>.:?0*)>:I.6 care !ace le)tura dintre liniile *ale i liniile din propriul tabel HprinteI6 i o coloan a*cun* re!erit de coloana 1>S?>.:?0*)>:I. din tabelul i%bricat HcopilI. En e7e%plul precendent6 tabloul i%bricat planete e*te or)anizat pe baz de inde7 prin adau)area clauzei O/#01IN0?IO1 I1.>D. e a*e%enea6 el are a*ociat o c1eie pri%ar 0n care pri%a coloan e*te 1>S?>.:?0*)>:I.. Acea*t coloan conine identi!icatorul liniei din tabelul HprinteI cu care e*te a*ociat o linie dat din tabelul de *tocare. ,peci!icarea unei c1ei pri%are ce conine 1>S?>.:?0*)>:I. i or)anizarea pe baz de inde7 a tabelului deter%in *i*te%ul * )rupeze !izic toate liniile tabloului i%bricat care aparin aceleiai linii HprinteI6 obin:ndu@*e un acce* %ai rapid la in!or%aii. En !uncie de tipul ele%entelor6 vectorii pe %ai %ulte niveluri *unt *tocai 0ntr@unul din ur%toarele %oduriF 0n cazul vectorilor de vectori6 0ntre)ul vector e*te *tocat inline dac nu depete li%ita *uperioar de 4--- octei *au dac *e *peci!ic e7plicit *tocarea lui *ub !or% de )O*G 0n cazul vectorilor de tablouri i%bricate6 0ntre)ul vector e*te *tocat *ub !or% de )O*6 linia rein:nd doar locatorul pentru obiectul )O* re*pectiv 2nu e7i*t tabele de *tocare a*ociate ele%entelor de tip tablou i%bricate din vector6 0ntrea)a colecie de tablouri i%bricate !iind *tocat 0n cadrul vectorului5. E0e1pl27 , *e *peci!ice e7plicit clauza de *tocare *ub !or% de obiect )O* pentru ele%entele de tip

Orientare pe obiecte n Oracle9i

"1

vector ale unui tablou i%bricat. 8uv:ntul c1eie CO)<;1:&0)<> poate !i utilizat relativ la orice colecie interioar !r nu%e 2vector *au tablou i%bricat5.
CREATE TYPE t_numere_$ AS VARRAY(20) O1 ,-.BER% & CREATE TYPE t_siruri_ti$ AS TAB0E O1 t_numere_$% & CREATE TAB0E ta#_numere ( (") ,-.BER, re4u tat t_siruri_ti$) ,ESTE/ TAB0E re4u tat STORE AS tst"(_re4 (VARRAY CO0-.,_VA0-E STORE AS 0OB numere_ "#)%

e a*e%enea6 cuvintele c1eie S?O/> 0S )O* per%it *peci!icarea 0n %od e7plicit a *tocrii *ub !or% de )O* pentru un tip vector de vectori.
CREATE TYPE t_siruri AS OBJECT ( a ,-.BER, # t_numere_$)% & CREATE TYPE t_$$ AS VARRAY(2) O1 t_siruri% & CREATE TAB0E ta#_$$ ( (") ,-.BER, )"ua_siruri t_$$) VARRAY )"ua_siruri STORE AS 0OB ta#_$$_ "#%

O in*tan a unui tip colecie *e con*truiete a*e%ntor cu o in*tan a unui tip obiect6 prin apelarea %etodei con*tructor a*ociate. Nu%ele %etodei con*tructor coincide cu cel al tipului6 iar ele%entele coleciei apar 0n li*ta de ar)u%ente6 deli%itate prin vir)ul. Apelul unei %etode con*tructor cu o li*t vid de ar)u%ente creeaz o colecie vid. O colecie vid nu are ele%ente i nu coincide cu o colecie care are valoarea null. E0e1pl27 +r%torul e7e%plu apeleaz con*tructorul pentru colecia pe %ai %ulte niveluri t:planete:ti. Ace*t tip e*te un tablou i%bricat de obiecte de tip t:planeta6 !iecare conin:nd un tablou i%bricat de obiecte av:nd tipul t:satelit. 8on*tructorul tabloului i%bricat e7terior apeleaz con*tructorul t:planeta pentru !iecare planet ce trebuie creat. /iecare con*tructor t:planeta apeleaz con*tructorul tipului tablou i%bricat t:sateliti:ti6 care6 la r:ndul *u6 pentru !iecare in*tan obiect de tip t:satelit6 apeleaz con*tructorul a*ociat.
5,SERT 5,TO ste e VA0-ES(6S"are6,23, t_p anete_ti(t_p aneta(6,eptun6,20, t_sate iti_ti(t_sate it(6Pr"teus6,:9), t_sate it(6Trit"n6,;2))), t_p aneta(6Jupiter6,2;<, t_sate iti_ti(t_sate it(6Ca ist"6,<9), t_sate it(67an8me)e6, 22)))))%

"2 Interogarea coleciilor

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

&7i*t dou %etode )enerale de intero)are a unui tabel care conine o coloan *au un atribut de tip colecie. (ri%a returneaz coleciile i%bricate inte)rate 0n cadrul liniilor rezultat6 iar cealalt di*tribuie colecia 0n aa !el 0nc:t !iecare ele%ent al ace*teia * apar pe c:te o linie. E0e1pl27 , *e ataeze tipului creat anterior6 t:autor6 atributul articole de tip t:articole:ti6 tablou i%bricat de ele%ente de tip t:articol. 8oloana de tip colecie articole poate aprea 0n li*ta S>)>C? ca orice alt coloan *calar6 intero)area ei )rup:nd6 0n ace*t caz6 ele%entele coleciei 0n linia rezultat cu care e*te a*ociat.
CREATE TYPE t_arti(" AS OBJECT ( (") ,-.BER, tit u VARCHAR2(!0), )ata /ATE)% & CREATE TYPE t_arti(" e_ti AS TAB0E O1 t_arti(" % & A0TER TYPE t_aut"r A// ATTR5B-TE (arti(" e t_arti(" e_ti) CASCA/E% -P/ATE ta#_aut"ri SET arti(" e A t_arti(" e_ti ( t_arti(" (20, 6/espre #u(urie6, SYS/ATE > 9), t_arti(" (20, 6Vi'i enta resentimentara6, SYS/ATE)) ?HERE (") A 0%

+r%toarea cerere returneaz nu%ele !iecrui autor i colecia de articole a*ociat6 prezentat 0n !or%at i%bricat.
SE0ECT a=nume, a=arti(" e 1RO. ta#_aut"ri a% ,-.E ART5CO0E(CO/, T5T0-, /ATA) >>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>P esu T_ART5CO0E_T5(T_ART5CO0(20, 6/espre #u(urie6, 620>A-7>036), T_ART5CO0(20, 6Vi'i enta resentimentara6, 629>A-7>036))

9ezultatele unei intero)ri *unt i%bricate dac o coloan de tip obiect din li*ta S>)>C? conine un atribut colecie 2c1iar dac acea colecie nu apare 0n li*ta S>)>C?5. e e7e%plu6 cererea ur%toare produce un rezultat i%bricat.
SE0ECT H 1RO. ta#_aut"ri%

6istribuirea re!ultatelor interogrilor


Nu toate utilitarele *au aplicaiile pot lucra cu rezultate 0n !or%at i%bricat. (entru a acce*a datele din coleciile Oracle e*te nece*ar un !or%at convenional6 atributele coleciilor unei linii !iind proiectate 0n cadrul uneia *au %ai %ultor linii relaionale. Ace*t lucru e*te po*ibil utiliz:nd e7pre*ia ?0*)>. &7pre*ia ?0*)> per%ite intero)area unei colecii 0n clauza G/O;6 0ntr@o %anier *i%ilar tabelelor obinuite. &!ectul e*te e7ecutarea "oin@ului dintre tabloul i%bricat i linia din tabelul HprinteI care 0l conine. &7pre*ia ?0*)> poate !i utilizat pentru intero)area oricrei e7pre*ii de tip colecie6 inclu*iv a valorilor tran*cendente 2variabile *au para%etri5. ?0*)> a 0nlocuit e7pre*ia

Orientare pe obiecte n Oracle9i

"3

*ubcerere ?E>6 care va !i depreciat 0n ver*iunile ulterioare. E0e1pl27 a5 , *e obin nu%ele !iecrui autor i colecia *a de articole6 0n !or%at di*tribuit.
SE0ECT aut=nume, art=("), art=tit u, art=)ata 1RO. ta#_aut"ri aut, TAB0E(aut=arti(" e) art% ,-.E >>>>>> P esu P esu CO/ >>> 20 20 T5T0>>>>>>>>>>>>>>>>>>>>>>>>> /espre #u(urie Vi'i enta resentimentara /ATA >>>>>>>>>> 20>A-7>03 29>A-7>03

&7pre*ia ?0*)> utilizeaz alias@ul tabelului HprinteI pentru a *peci!ica tabelul care conine coloana colecie re!erit. En e7e%plul anterior6 e7pre*ia ?0*)> 2aut.articole5 !ace re!erire la coloana de tip colecie articole a tabelului tab:autori. (entru a re!eri o coloan dintr@un tabel6 e7pre*ia ?0*)> poate utiliza alias@ul oricrui tabel ce apare la *t:n)a ei 0n clauza G/O;. b5 ,i%pla *electare a nu%elui i a li*tei de articole pentru !iecare autor produce linii doar pentru acei autori care au articole a*ociate. (entru a obine i linii re!eritoare la autorii !r articole 0nre)i*trate *e poate utiliza un outer8"oin.
SE0ECT aut=nume, art=H 1RO. ta#_aut"ri aut, TAB0E(aut=arti(" e)(N) art%

c5 En e7e%plul ur%tor6 tabelul tab:autori e*te utilizat 0n clauza G/O; doar pentru a a*i)ura un alias de tabel pentru e7pre*ia ?0*)> care ur%eaz. e aceea6 dei 0n rezultat nu apare nici o coloan din tabel 2alta dec:t coloana re!erit 0n e7pre*ia ?0*)>56 eli%inarea ace*tuia din clauza G/O; nu e*te per%i*.
SE0ECT art=H 1RO. ta#_aut"ri aut, TAB0E(aut=arti(" e) art%

&7e%plele precedente !olo*e*c e7pre*ii ?0*)> care conin nu%e de colecii. O e7pre*ie ?0*)> poate conine i o *ubcerere a*upra unei colecii. 9e*triciile a*upra utilizrii *ubcererilor 0ntr@o e7pre*ie ?0*)> *untF *ubcererea trebuie * returneze un tip colecieG li*ta S>)>C? a *ubcererii trebuie * conin un *in)ur c:%pG *ubcererea trebuie * returneze o *in)ur colecie6 nu poate returna colecii pentru %ai %ulte linii 2alt!el6 apare eroarea H O/08'142$F single8roM subOuer= returns more than one roMI5. E0e1pl27 , *e a!ieze colecia de articole a autorului av:nd codul -. ,e ob*erv c *ubcererea din e7pre*ia ?0*)> 0ndeplinete toate re*triciile prezentate.
SE0ECT H 1RO. TAB0E (SE0ECT aut=arti(" e 1RO. ta#_aut"ri aut ?HERE aut=(") A 0)%

O e7pre*ie ?0*)> poate !i utilizat 0n clauza G/O; a unei cereri inte)rate 0ntr@o e7pre*ie C</SO/.

"4

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

E0e1pl27 , *e *electeze codul autorului i li*ta de articole core*punztoare ace*tuia6 utiliz:nd o e7pre*ie C</SO/.
SE0ECT aut=("), C-RSOR (SE0ECT H 1RO. TAB0E(aut=arti(" e)) 1RO. ta#_aut"ri aut%

i*tribuirea intero)rilor poate !i utilizat6 0n %od *i%ilar6 i pentru coleciile pe %ai %ulte niveluri. E0e1pl27 , *e e7e%pli!ice di*tribuirea unei intero)ri re!eritoare la un tablou i%bricat de tablouri i%bricate. ,e con*ider tabelul stele6 0n care !iecare *tea are ca atribut un tablou i%bricat de planete i !iecare planet are un tablou i%bricat de *atelii. , *e de!inea*c o cerere care returneaz nu%ele tuturor *ateliilor a*ociai planetelor ce )raviteaz 0n jurul *telelor 0nre)i*trate 0n tabel.
SE0ECT t=nume 1RO. ste e s, TAB0E(s=p anete) p, TAB0E(p=sate iti) t%

(entru a di*tribui rezultatul cererilor a*upra coleciilor *e pot crea proceduri *au !uncii 3)4S2) *peciale. E0e1pl27 a5 , *e creeze o !uncie sateliti:mari25 care * returneze doar *ateliii cu dia%etrul %ai %are dec:t 77.
CREATE OR REP0ACE 1-,CT5O, sate iti_mari (p_sate iti 5, t_sate iti_ti) RET-R, t_sate iti_ti 5S $_sate iti_mari t_sate iti_ti IA t_sate iti_ti()% i ,-.BER% B ,-.BER IA 0% BE75, 1OR i 5, 2==p_sate iti=CO-,T 0OOP 51 p_sate iti 5S ,OT ,-00 A,/ p_sate iti(i)=)iametru @A 99 THE, $_sate iti_mari=EFTE,/% B IA B N 2% $_sate iti_mari(B) IA p_sate iti(i)% E,/ 51% E,/ 0OOP% RET-R, $_sate iti_mari% E,/% &

b5 , *e obin li*ta *telelor care au planete cu *atelii %ari6 0%preun cu nu%ele i dia%etrele *ateliilor core*punztori.
SE0ECT s=nume, sm=nume, sm=)iametru 1RO. ste e s, TAB0E (s=p anete) p, TAB0E (CAST (sate iti_mari (p=sate iti) AS t_sate iti_ti)) sm%

Orientare pe obiecte n Oracle9i

""

$+ecuia operaiilor L.D asupra coleciilor


);.F A*upra coloanelor de tip tablou i%bricat6 *i*te%ul per%ite e!ectuarea ur%toarelor operaii in*erri i %odi!icri care a!ecteaz o 0ntrea) colecieG %odi!icri pe *eciuni 2pieceMise updates56 adic operaii de in*erare6 ter)ere *au %odi!icare a ele%entelor unei colecii.

,i*te%ul Oracle nu per%ite %odi!icri pe *eciuni a*upra coloanelor de tip vector. 8oloanele &0//0@ pot !i6 0n*6 in*erate *au %odi!icate ato%ic. (entru %odi!icrile pe *eciuni ale coloanelor de tip tablou i%bricat6 co%enzile );. trebuie * identi!ice valoarea ele%entului care trebuie %odi!icat. Ace*t lucru *e !ace utiliz:nd e7pre*ia ?0*)>. ac valoarea coleciei returnate de e7pre*ia ?0*)> e*te null6 atunci co%anda de %odi!icare returneaz eroarea HO/08229',F re+erence to 1<)) table 6alue I. Nu *e pot in*era6 ter)e *au %odi!ica valori dec:t 0n cadrul tablourilor i%bricate in*taniate. E0e1pl27 +r%toarele co%enzi e7e%pli!ic e7ecuia pe *eciuni a celor trei operaii );. a*upra coloanelor de tip tablou i%bricat.
>> inserare 5,SERT 5,TO TAB0E (SE0ECT aut=arti(" e 1RO. ta#_aut"ri aut ?HERE aut=(") A 0) VA0-ES (30, 6,"i(a6, SYS/ATE)% >>m")i*i(are -P/ATE TAB0E (SE0ECT aut=arti(" e 1RO. ta#_aut"ri aut ?HERE aut=(") A 0) art SET VA0-E(art) A t_arti(" (art=("),6,"i(a si eu6,art=)ata) ?HERE art=(") A 30% >> ster'ere /E0ETE 1RO. TAB0E(SE0ECT aut=arti(" e 1RO. ta#_aut"ri aut ?HERE aut=(") A 0) art ?HERE art=(") A 20%

,i%ilar coleciilor *i%ple6 coleciile pe %ai %ulte niveluri ce conin vectori per%it doar operaii )lobale la nivel de colecie. E0e1pl27 , *e %odi!ice pe *eciuni o colecie pe %ai %ulte niveluri pentru a redenu%i *atelitul #riton al planetei Neptun. Noul nu%e e*te #1alia.
-P/ATE TAB0E(SE0ECT p=sate iti 1RO. ste e s, TAB0E(s=p anete) p ?HERE p=nume A 6,eptun6) sat SET VA0-E(sat) A t_sate it(6T3a ia6, ;0) ?HERE sat=nume A 6Trit"n6%

&7pre*ia ?0*)> *electeaz tabloul i%bricat ce conine *ateliii planetei Neptun. #abloul i%bricat returnat pri%ete alias@ul sat6 care e*te utilizat 0n cadrul clauzei S>? pentru a re!eri valoarea in*tanei ce va !i 0nlocuit 2utiliz:nd !uncia &0)<>5 i nu identi!icatorul obiect 21>S?>.:?0*)>:I.5.

"'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

E0e1pl27 (re*upun:nd c 6:planete e*te o variabil de tip tablou i%bricat de planete t:planete:ti6 * *e in*ereze o nou *tea av:nd nu%ele Aurora >oreal6 v:r*ta 1$ i planetele a*ociate date de variabila 6:planete.
/EC0ARE $_p anete t_p anete_ti IA ,-00% BE75, 5,SERT 5,TO ste e VA0-ES (6Aur"ra B"rea a6, 2<, $_p anete)% E,/% &

+r%toarea co%and %odi!ic tabelul stele *et:nd colecia de planete a *telei Aurora >oreal la o valoare introdu* de la ta*tatur. ac *e introduce o e7pre*ie valid pentru variabila de *ub*tituie utilizat6 atunci %odi!icarea *e realizeaz cu *ucce* 2de e7e%plu6 t:planete:ti2t:planeta2P(lutoP6 116 null555.
-P/ATE ste e s SET s=p anete A O$_p anete ?HERE s=nume A 6Aur"ra B"rea a6%

E0e1pl27 a5 , *e introduc o nou planet a*ociat *telei ,oare. (laneta are nu%ele ,aturn6 %a*a "5 i un *in)ur *atelit denu%it 9ea6 cu dia%etrul $2.
5,SERT 5,TO TAB0E( SE0ECT p anete 1RO. ste e ?HERE nume A 6S"are6) VA0-ES (6Saturn6, :+, t_sate iti_ti( t_sate it(6Rea6, <2)))%

b5 , *e a*ocieze planetei Qupiter un nou *atelit6 Miranda6 cu dia%etrul 4-. &7pre*ia ?0*)> din ace*t e7e%plu conine o *ubcerere care *electeaz tabloul i%bricat interior pentru a putea *peci!ica inta co%enzii I1S>/?.
5,SERT 5,TO TAB0E(SE0ECT p=sate iti 1RO. TAB0E(SE0ECT s=p anete 1RO. ste e s ?HERE s=nume A 6S"are6) p ?HERE p=nume A 6Jupiter6) VA0-ES (6.iran)a6, !0)%

3.). &otenirea tipurilor


#ipurile obiect per%it o %odelare e7pre*iv i intuitiv a entitilor din lu%ea real care trebuie i%ple%entate 0n cadrul unei aplicaii. 8u ajutorul obiectelor6 pe l:n) entiti izolate6 *e pot de!ini tipuri *pecializate de entiti6 or)anizate 0ntr@o ierar1ie de tipuri ce deriv dintr@un tip HprinteI. A*t!el6 operaiile *e pot e7ecuta a*upra 0ntre)ii ierar1ii *au di!ereniat6 a*upra !iecrui tip din ierar1ie6 0n !uncie de nivelul de *pecializare pe care 0l i%ple%enteaz. O ierar1ie de tipuri poate !i a*e%nat cu un arbore )enealo)ic al tipurilor obiect. &a con*t

Orientare pe obiecte n Oracle9i

")

dintr@un tip de baz6 nu%it *upertip 2tip HprinteI5 i unul *au %ai %ulte niveluri de tipuri obiect6 nu%ite *ubtipuri 2tipuri HcopiiI56 derivate din ace*ta. ,ubtipurile dintr@o ierar1ie *unt conectate cu *upertipurile lor prin %otenire6 ace*t lucru 0n*e%n:nd c *ubtipurile pri%e*c auto%at atributele i %etodele tipului HprinteI. e a*e%enea6 *ubtipurile *e re!lect auto%at orice *c1i%bare a*upra atributelor *au %etodelor din cadrul tipului HprinteI6 ace*t !apt de!inind proprietatea de propa)are auto%at a *c1i%brilor. +n *ubtip devine o ver*iune *pecializat a tipului HprinteI prin adu)area de noi atribute i %etode celor %otenite de la HprinteI *auJi prin rede!inirea %etodelor %otenite. 9ede!inirea unei %etode %otenite a*i)ur unui *ubtip propria i%ple%entare a %etodei re*pective. O in*tan a unui obiect de un anu%it tip obiect poate !i *ub*tituit cu o in*tan obiect a unui *ubtip al *u6 ceea ce de!inete proprietatea de poli%or!i*%. (oli%or!i*%ul e*te proprietatea unei variabile *au coloane obiectuale de a conine o valoare de tipul declarat *au de orice *ubtip al tipului declarat. O %etod apelat relativ la o a*t!el de variabil *au coloan obiect *e poate e7ecuta 0n %od di!erit6 0n !uncie de cel %ai *peci!ic tip al valorii coninute.

-ipuri i subtipuri
+n *ubtip poate !i derivat dintr@un *upertip 0n %od direct *au indirect6 prin inter%ediul %ai %ultor niveluri de e7tindere. intr@un *upertip *e pot deriva %ai %ulte *ubtipuri6 dar un *ubtip poate !i derivat 0n %od direct dintr@un *in)ur *upertip. 8u alte cuvinte6 *i*te%ul Oracle per%ite doar i%ple%entarea %otenirii *i%pl6 nu i a celei %ultiple. erivarea unui *ubtip dintr@un *upertip *e realizeaz prin de!inirea unei variante *pecializate a *upertipului. e e7e%plu6 dintr@un tip t:organi ator *e poate deriva un tip t:org:particular i unul t:org:de:stat. /iecare dintre ace*te *ubtipuri de!ine*c tot un tip t:organi ator6 dar unul *pecializat. 8eea ce !ace un *ubtip *pecial i 0l di*tin)e de *upertipul HprinteI e*te o *c1i%bare a*upra *tructurii %otenite de la tipul HprinteI 2%odi!icarea *au adu)area de atribute *au %etode5. Atributele i %etodele unui tip obiect *unt ele%entele e*eniale din *peci!icaia lui. ac obiectul t:organi ator are patru atribute cod6 nume6 tele+on6 adresa i %etoda get:cod256 atunci tipul obiect derivat din el va avea obli)atoriu aceleai patru atribute i aceeai %etod. +n *ubtip *e poate *pecializa utiliz:nd una dintre ur%toarele %odalitiF adu)area de noi atribute *au %etodeG *c1i%barea i%ple%entrii unei %etode pe care *ubtipul o %otenete de la tipul HprinteI6 a*t!el 0nc:t ver*iunea de *ubtip * e7ecute un alt cod dec:t HprinteleI *u. e e7e%plu6 *e poate *pecializa tipul t:organi ator prin adu)area unui nou atribut6 cod:director:+inanciar- obin:ndu@*e a*t!el *ubtipul t:org:particular. ac tipul t:organi ator i%ple%enteaz o %etod care * returneze de*crierea co%plet a or)anizatorului6 atunci %etoda re*pectiv trebuie adaptat pentru *ubtipul t:org:particular a*t!el 0nc:t * includ i atributul nou introdu*. +n *ubtip nu poate eli%ina *au *c1i%ba tipul unui atribut %otenit de la HprinteI6 el nu poate dec:t * adau)e noi atribute. +n tip obiect +orma:geometrica poate conine o %etod calculea a:aria25. ou *ubtipuri ale ace*tui tip6 dreptunghi i cerc trebuie * i%ple%enteze acea*t %etod 0n %oduri di!erite.

",

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

Atributele i %etodele pri%ite de *ubtip de la HprinteleI lui *e nu%e*c %otenite. Acea*ta pre*upune %ai %ult dec:t !aptul c atributele i %etodele *unt preluate de la tipul HprinteI la %o%entul de!inirii *ubtipului. =e)tura de %otenire r%:ne HvieI. Orice %odi!icri !cute ulterior a*upra atributelor *au %etodelor tipului HprinteI *unt re!lectate i 0n *ubtipurile tipului re*pectiv. +n *ubtip conine6 la orice %o%ent6 acelai nucleu de atribute i %etode ca i tipul HprinteI6 plu* alte atribute i %etode adu)ate6 cu e7cepia cazurilor 0n care *ubtipul o!er o i%ple%entare nou pentru o %etod %otenit. (rin ur%are6 dac de!iniia )eneral a tipului t:organi ator *e *c1i%b6 atunci *e %odi!ic i de!iniia tipurilor HcopiiI t:org:particular i t:org:de:stat. 9elaia HvieI de %otenire care e7i*t 0ntre *upertip i *ubtipurile *ale con*itutie *ur*a puterii i co%ple7itii obiectelor. (rintr@o *i%pl reco%pilare6 *e poate *c1i%ba *tructura *upertipului6 e!ectul re!lect:ndu@*e 0n toate *ubtipurile din ierar1ie. in ace*t %otiv6 a*t!el de *c1i%bri trebuie bine plani!icate. e a*e%enea6 o caracteri*tic i%portant re!eritoare la un tabel *au o coloan e*te !aptul c poate conine obiecte at:t de tipul declarat6 c:t i de *ubtipurile ace*tuia. e aceea6 *unt nece*are noi %odaliti pentru a putea !iltra 0n cadrul co%enzilor S2) obiectele de un anu%it tip din ierar1ie. (rin de!iniie6 *e poate *peci!ica dac un tip obiect per%ite derivarea de *ubtipuri 2opiunea 1O? GI10) din cadrul co%enzii C/>0?> ?0*)>5. En %od i%plicit6 un tip obiect e*te !inal. E0e1pl27 , *e de!inea*c un tip obiect6 t:persoana6 care * reprezinte un %odel de date pentru in!or%aiile le)ate de o per*oan. #ipul t:persoana trebuie * per%it de!inirea ulterioar de *ubtipuri.
CREATE OR REP0ACE TYPE t_pers"ana AS OBJECT ( (") ,-.BER, nume VARCHAR2(+0)) ,OT 15,A0% &

(roprietatea unui tip de a accepta derivarea de *ubtipuri poate !i %odi!icat printr@o co%and 0)?>/ ?@3>. e e7e%plu6 ur%toarea co%and *c1i%b tipul t:persoana 0ntr@un tip !inal.
A0TER TYPE t_pers"ana 15,A0%

e a*e%enea6 %etodele pot !i declarate ca !iind !inale *au nu. ac o %etod e*te !inal6 *ubtipurile nu pot *@i *c1i%be i%ple%entarea. ,pre deo*ebire de tipuri6 %etodele *unt 0n %od i%plicit ne!inale i trebuie declarate e7plicit !inale. E0e1pl27 , *e creeze un tip ne!inal care conine o !uncie ;>;*>/ !inal 2co%binaia inver* nu are *en*5.
CREATE TYPE tip AS OBJECT (Q, .E.BER PROCE/-RE a*isare(), 15,A0 .E.BER 1-,CT5O, met(E ,-.BER) Q) ,OT 15,A0% &

Crearea subtipurilor
+n tip poate avea %ai %ulte *ubtipuri6 iar ace*tea pot avea la r:ndul lor *ubtipuri. +n *ubtip %otenete toate atributele i %etodele tipului HprinteI direct 2declarate *au %otenite5. (entru a de!ini un *ubtip *e utilizeaz co%anda C/>0?> ?@3> *peci!ic:nd 0n clauza <1.>/ HprinteleI direct al *ubtipului.

Orientare pe obiecte n Oracle9i

"0

E0e1pl27 , *e de!inea*c tipul t:artist care *pecializeaz tipul t:persoana. eoarece t:artist e*te un *ubtip al tipului t:persoana creat anterior6 el %otenete atributele cod i nume.
CREATE TYPE t_artist -,/ER t_pers"ana ( (")_artist ,-.BER, an_nastere VARCHAR2(!), an_m"arte VARCHAR2(!), nati"na itate VARCHAR2(!0))% &

8o%anda care de!inete t:artist *pecializeaz tipul t:persoana6 adu):nd patru atribute. Noile atribute declarate 0ntr@un *ubtip trebuie * aib nu%e di!erite de nu%ele oricrui atribut *au %etod declarate 0n *upertipurile directe *au indirecte ale tipului re*pectiv. E0e1pl27 a5 , *e de!inea*c un *ubtip ne!inal6 t:autor6 al tipului t:persoana.
CREATE OR REP0ACE TYPE t_aut"r -,/ER t_pers"ana ( (")_aut"r ,-.BER, "(upatie VARCHAR2(30), )es(riere VARCHAR2(200)) ,OT 15,A0%

b5 , *e creeze un *ubtip6 t:"urnalist6 al tipului t:autor de!init anterior. (e l:n) atributele %otenite de la tipul t:autor6 ace*ta declar dou noi atribute6 +unctie i loc:munca.
CREATE TYPE t_Burna ist -,/ER t_aut"r ( *un(tie VARCHAR2(20), "(_mun(a VARCHAR2(30))% & SM0@ )es( t_Burna ist t_Burna ist eEten)s ST-/E,T=T_A-TOR ,ume ,u R Tip >>>>>>>>>>> >>>> >>>>>>>>>>>>>> CO/ ,-.BER ,-.E VARCHAR2(+0) CO/_A-TOR ,-.BER OC-PAT5E VARCHAR2(30) /ESCR5ERE VARCHAR2(200) 1-,CT5E VARCHAR2(20) 0OC_.-,CA VARCHAR2(30)

+n tip e*te declarat nein*taniabil utiliz:nd clauza 1O? I1S?01?I0*)>. +n tip nein*taniabil e*te un !el de container. ac tipul nu e*te in*taniabil6 el nu are con*tructor 2nici i%plicit6 nici de!init de utilizator5 i nu *e pot crea in*tane ale tipului re*pectiv. En li%bajul 5a6a6 noiunea core*pondent e*te cea de cla* ab*tract. Acea*t opiune e*te util atunci c:nd dou entiti au atribute co%une care pot !i i%ple%entate 0n cadrul unui tip HprinteI al unei ierar1ii6 dar ace*te atribute nu *unt *u!iciente pentru in*tanierea de obiecte. E0e1pl27 +tiliz:nd tipuri obiect6 * *e reprezinte dou cate)orii de pie*e 2rotund i dreptun)1iular5 caracterizate de un nucleu de atribute i %etode co%une.
CREATE TYPE t_piesa AS OBJECT ( (") ,-.BER, tip VARCHAR2(20), ,OT 5,STA,T5AB0E .E.BER 1-,CT5O, supra*ata RET-R, ,-.BER)

'1

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

,OT 5,STA,T5AB0E ,OT 15,A0% & CREATE TYPE t_piesa_r"tun)a -,/ER t_piesa ( )iametru ,-.BER, OVERR5/5,7 .E.BER 1-,CT5O, supra*ata RET-R, ,-.BER)% & CREATE TYPE t_piesa_)reptun'3iu ara -,/ER t_piesa ( atime ,-.BER, un'ime ,-.BER, OVERR5/5,7 .E.BER 1-,CT5O, supra*ata RET-R, ,-.BER)% &

Nu e*te per%i* crearea obiectelor de tip t:piesa pentru care nu *unt *peci!icate clar di%en*iunile 2li%e i lun)i%e pentru cea dreptun)1iular i dia%etru pentru cea rotund5. e aceea6 tipul HprinteI co%un e*te nein*taniabil. Metodele pot !i i ele nein*taniabile. ,i%ilar tipurilor nein*taniabile6 opiunea core*punztoare e*te util atunci c:nd dou tipuri trebuie * i%ple%enteze 0n %od di!erit o %etod co%un i obli)atorie. +n tip care conine o %etod nein*taniabil trebuie * !ie nein*taniabil. En e7e%plul anterior6 !uncia supra+ata din tipul nein*taniabil t:piesa e*te i ea nein*taniabil. eci6 de!iniiile corpurilor tipurilor in*taniabile t:piesa:rotunda i t:piesa:dreptunghiulara trebuie * conin o i%ple%entare pentru acea*t %etod. E0e1pl27 , *e de!inea*c o ierar1ie cu tipul rdcin +orma:geometrica i *ubtipurile dreptunghi i cerc. #ipul HprinteI e*te ne!inal i nein*taniabil6 iar *ubtipurile *ale6 dreptunghi i cerc6 *unt !inale.
CREATE TYPE *"rma_'e"metri(a AS OBJECT ( tip VARCHAR2(20), ,OT 5,STA,T5AB0E .E.BER 1-,CT5O, aria RET-R, ,-.BER, ,OT 5,STA,T5AB0E .E.BER 1-,CT5O, perimetru RET-R, ,-.BER) ,OT 5,STA,T5AB0E ,OT 15,A0% & CREATE TYPE )reptun'3i -,/ER *"rma_'e"metri(a ( un' ,-.BER, at ,-.BER, OVERR5/5,7 .E.BER 1-,CT5O, aria RET-R, ,-.BER, OVERR5/5,7 .E.BER 1-,CT5O, perimetru RET-R, ,-.BER)% & CREATE TYPE BO/Y )reptun'3i AS OVERR5/5,7 .E.BER 1-,CT5O, aria RET-R, ,-.BER 5S BE75, RET-R, SE01= un' H SE01= at% E,/% OVERR5/5,7 .E.BER 1-,CT5O, perimetru RET-R, ,-.BER 5S BE75, RET-R, 2 H (SE01= un' N SE01= at)% E,/% E,/% & SE0ECT )reptun'3i(6PATR-0ATER6,20, 20)=aria() 1RO. /-A0%

Orientare pe obiecte n Oracle9i CREATE TYPE (er( -,/ER *"rma_'e"metri(a ( ra4a ,-.BER, OVERR5/5,7 .E.BER 1-,CT5O, aria RET-R, ,-.BER, OVERR5/5,7 .E.BER 1-,CT5O, perimetru RET-R, ,-.BER)% & CREATE OR REP0ACE TYPE BO/Y (er( AS OVERR5/5,7 .E.BER 1-,CT5O, aria RET-R, ,-.BER 5S pi ,-.BER IA 3=2!2+% BE75, RET-R, SE01=ra4a H SE01=ra4a H pi% E,/% OVERR5/5,7 .E.BER 1-,CT5O, perimetru RET-R, ,-.BER 5S pi ,-.BER IA 3=2!2+% BE75, RET-R, 2 H SE01=ra4a H pi% E,/% E,/% & SE0ECT (er((6C5RC-0ARA6,20)=perimetru() 1RO. )ua %

'1

ac un *ubtip nu a*i)ur o re*criere in*taniabil pentru !iecare %etod nein*taniabil %otenit6 *ubtipul trebuie 0n %od obli)atoriu * !ie nein*taniabil. +n *ubtip in*taniabil poate !i e7tin* dintr@un *upertip nein*taniabil6 dar nu inver*. 8o%anda 0)?>/ ?@3> per%ite %odi!icarea unui tip din in*taniabil 0n nein*taniabil6 i reciproc. e e7e%plu6 ur%toarea co%and %odi!ic tipul t:eCemplu * !ie in*taniabilF
A0TER TYPE t_eEemp u 5,STA,T5AB0E%

+n tip in*taniabil poate !i %odi!icat a*t!el 0nc:t * !ie nein*taniabil doar dac nu e7i*t nici o coloan6 vizualizare6 tabel *au in*tan obiect care * 0l re!ere 0n %od direct *au indirect prin inter%ediul unui tip *au *ubtip dependent 2practic6 dac nu *@a de!init nici o in*tan a lui5. Nere*pectarea acea*tei re)uli deter%in apariia erorii H O/082232$F cannot change a t=pe to 1O? I1S?01?I0*)> i+ it has dependent tablesI. Nu e*te per%i* de!inirea de tipuri nein*taniabile !inale6 deoarece ace*tea nu pot !i !olo*ite ulterior 2*i*te%ul returneaz eroarea de co%pilare H 3)S8''(14F creating a GI10) 1O? I1S?01?I0*)> t=peI5.

&otenirea8 supra4ncrcarea i suprascrierea (etodelor


+n *ubtip %otenete auto%at toate %etodele *upertipului *u 2declarate *au %otenite5. &l poate rede!ini 2*upra*crie5 %etodele %otenite i poate adu)a %etode noi. A*t!el6 un tip poate conine %ai %ulte %etode cu acelai nu%e6 dar cu *i)naturi di!erite. En ace*t caz6 co%pilatorul utilizeaz *i)naturile %etodelor pentru a le deo*ebi la %o%entul rulrii. ,i)natura unei %etode e*te un !el de pro!il *tructural. &a con*t din nu%ele %etodei6 tipurile i ordinea para%etrilor !or%ali ai %etodei 2inclu*iv para%etrul i%plicit S>)G5. Metodele unui tip care au acelai nu%e i *i)naturi di!erite *e nu%e*c *upra0ncrcate. otarea unui tip cu %ai %ulte %etode 2declarate *au %otenite5 av:nd acelai nu%e e*te denu%it *upra0ncrcare 2o6erloading5. ,upra0ncrcarea e*te util atunci c:nd trebuie * *e a*i)ure %ai %ulte i%ple%entri ale aceluiai co%porta%ent. E0e1pl27

'2

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

,ubtipul t:subtip creeaz o *upra0ncrcare pentru procedura25. e re%arcat c *ubtipul conine a%bele ver*iuni ale procedurii. En !uncie de tipul para%etrului *e apeleaz procedura core*punztoare.
CREATE TYPE t_tip AS OBJECT ( a ,-.BER, .E.BER PROCE/-RE pr"(e)ura(E /ATE)) ,OT 15,A0% & CREATE OR REP0ACE TYPE BO/Y t_tip AS .E.BER PROCE/-RE pr"(e)ura(E /ATE) 5S BE75, /B.S_O-TP-T=P-T_05,E (SE01=a CC TO_CHAR(E, 6))mm88886))% E,/ pr"(e)ura% E,/% & CREATE TYPE t_su#tip -,/ER t_tip ( .E.BER PROCE/-RE pr"(e)ura(E VARCHAR2))% & CREATE OR REP0ACE TYPE BO/Y t_su#tip AS .E.BER PROCE/-RE pr"(e)ura(E $ar(3ar2) 5S BE75, /B.S_O-TP-T=P-T_05,E (SE01=a CC E)% E,/% E,/% & SET SERVERO-TP-T O, /EC0ARE $ t_tip IA t_tip (2)% S t_su#tip IA t_su#tip (2)% BE75, $=pr"(e)ura (SYS/ATE)% >>$_pr"(e)ura (6teEt6)% >>in("re(t, 'enerea4a er"are S=pr"(e)ura (SYS/ATE)% S=pr"(e)ura (6teEt6)% E,/% &

9ede!inirea unei %etode %otenite pentru a@i particulariza co%porta%entul 0ntr@un *ubtip *e nu%ete *upra*criere 2o6erriding5. (entru a *e%nala c o %etod e*te *upra*cri*6 *e utilizeaz cuv:ntul c1eie O&>//I.I1# 0n cadrul de!iniiei tipului i a corpului ace*tuia. E0e1pl27 #ipul +orma:geometrica poate conine o %etod a+isea a25. Acea*ta va !i *upra0ncrcat 0n cadrul *ubtipului dreptunghi a*t!el 0nc:t * pri%ea*c i * a!ieze un para%etru de tip ir de caractere6 p:notatie. ,e va adau)a noua %etod 0n cadrul tipului +orma:geometrica6 i *e va da o i%ple%entare !r para%etri i apoi va !i *upra0ncrcat 0n *ubtipul dreptunghi. En !inal6 *e prezint o %odalitate de te*tare.
A0TER TYPE *"rma_'e"metri(a A// .E.BER PROCE/-RE a*isea4a CASCA/E% CREATE TYPE BO/Y *"rma_'e"metri(a AS

Orientare pe obiecte n Oracle9i .E.BER PROCE/-RE a*isea4a 5S BE75, /B.S_O-TP-T=P-T_05,E (6 1"rma 'e"metri(a )e tipI 6 CC SE01=tip)% E,/% E,/% & A0TER TYPE )reptun'3i A// .E.BER PROCE/-RE a*isea4a(p_n"tatie VARCHAR2)% CREATE OR REP0ACE TYPE BO/Y )reptun'3i AS OVERR5/5,7 .E.BER 1-,CT5O, aria RET-R, ,-.BER 5S BE75, RET-R, SE01= un' H SE01= at% E,/% OVERR5/5,7 .E.BER 1-,CT5O, perimetru RET-R, ,-.BER 5S BE75, RET-R, 2 H (SE01= un' N SE01= at)% E,/% >> pana ai(i nimi( s(3im#at .E.BER PROCE/-RE a*isea4a(p_n"tatie VARCHAR2) 5S BE75, SE01=a*isea4a()% /B.S_O-TP-T=P-T_05,E(6,"tatiaI6 CC p_n"tatie)% /B.S_O-TP-T=P-T_05,E(6HHHHHHHHH6)% /B.S_O-TP-T=P-T_05,E(6H H6)% /B.S_O-TP-T=P-T_05,E(6HHHHHHHHH6)% E,/% E,/% & /EC0ARE $_)reptun'3i )reptun'3i IA )reptun'3i(6PATR-0ATER6, 20, 20)% BE75, /B.S_O-TP-T=P-T_05,E(6H.et")a 66a*isea4a66 )in supertip=H6)% $_)reptun'3i=a*isea4a% /B.S_O-TP-T=P-T_05,E(6H.et")a 66a*isea4a66 )in su#tip===H6)% $_)reptun'3i=a*isea4a(6ABC/6)% E,/% &

'3

,upra*crierea rede!inete o %etod %otenit pentru a@i %odi!ica aciunea 0n *ubtip. e e7e%plu6 un *ubtip patrat 2derivat din *upertipul dreptunghi5 ar putea *upra*crie %etoda aria25 pentru a particulariza calculul *peci!ic al ariei. ac un *ubtip *upra*crie o %etod i o in*tan a *ubtipului invoc acea %etod6 atunci *e e7ecut ver*iunea local a ace*teia. e a*e%enea6 dac *ubtipul are alte *ubtipuri6 atunci ace*tea %otene*c %etoda *upra*cri* i nu ver*iunea ori)inal. &*te po*ibil ca un *upertip * conin *upra0ncrcri ale unei %etode care e*te *upra*cri* 0n cadrul unui *ubtip. eoarece *upra0ncrcrile %etodei au acelai nu%e6 co%pilatorul utilizeaz *i)natura %etodei din *ubtip pentru a identi!ica ver*iunea din *upertip care e*te *upra*cri*. 8u alte cuvinte6 pentru a *upra*crie o %etod trebuie * i *e p*treze *i)natura6 care o identi!ic 0n %od unic 0n cadrul tipului obiect. En e7e%plul ur%tor6 *ubtipul *e%naleaz c *upra*crie %etoda !r para%etrii a+isea a25. eclaraiile co%plete ale %etodelor *upra*cri*e trebuie * !ie inclu*e 0n co%anda C/>0?> ?@3> *O.@.

'4

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

CREATE TYPE t_tip AS OBJECT (Q, .E.BER PROCE/-RE a*isea4a(), .E.BER PROCE/-RE a*isea4a(p_tit u VARCHAR2)) ,OT 15,A0% CREATE TYPE t_Su#Tip -,/ER t_Tip ( Q, OVERR5/5,7 .E.BER PROCE/-RE a*isea4a())%

9e*triciile la *upra*crierea %etodelor *unt ur%toareleF *e pot *upra*crie doar %etode care nu *unt declarate !inale 0n *upertipG %etodele de ordonare 2de tip O/.>/5 pot aprea doar 0n tipul rdcin al unei ierar1ii de tipuri 2ele nu pot !i *upra*cri*e 0n *ubtipuri5G o %etod *tatic nu poate rede!ini o %etod ;>;*>/ din *upertipG o %etod ;>;*>/ nu poate rede!ini o %etod *tatic din *upertipG o %etod care !urnizeaz valori i%plicite pentru anu%ii para%etri6 trebuie * a*i)ure aceleai valori i%plicite pentru aceiai para%etri 0n cadrul *ubtipului care o *upra*crie.

9egarea dina(ic a (etodelor


8a rezultat al *upra*crierii %etodelor6 o ierar1ie de tipuri poate de!ini %ai %ulte i%ple%entri pentru aceeai %etod. e e7e%plu6 0ntr@o ierar1ie de tipuri core*punztoare !or%elor )eo%etrice6 !iecare dintre tipuri trebuie * de!inea*c 0n %od di!erit %etoda de calcul a ariei. (entru a deter%ina care dintre i%ple%entrile unei %etode *upra*cri*e va !i !olo*it6 *e analizeaz tipul in*tanei obiect ce invoc %etoda. ecizia e*te luat la %o%entul rulrii i nu 0n ti%pul co%pilrii. e aceea6 acea*t %odalitate de ale)ere a %etodei invocate *e nu%ete le)are dina%ic 2d=namic method dispatch5. Apelul %etodei *e !ace con!or% cu cea %ai apropiat i%ple%entare6 cut:nd 0n de!iniia tipului *peci!icat i apoi pe nivelurile *uperioare din cadrul ierar1iei de tipuri. eci6 dac apelul invoc o %etod ;>;*>/ a unei in*tane obiect *au o %etod *tatic a unui tip6 atunci e*te utilizat i%ple%entarea de!init *au %otenit de acel tip. e e7e%plu6 dac inst e*te o in*tan obiect a unui tip 2tip5 e7tin* din alt tip 2tip:super5 i care are un *ubtip 2tip:sub56 atunci apelul inst.met25 caut %ai 0nt:i o i%ple%entare a %etodei met25 de!init 0n tipul tip. ac acea*ta nu e7i*t6 caut pe nivelul *uperior6 deci 0n *upertip. /aptul c tip:sub de!inete i el o i%ple%entare nu e*te relevant deoarece ierar1ia tipurilor e*te parcur* de jo* 0n *u*6 ctre nivelurile *uperioare. ,ubtipurile tipului curent nu prezint intere* 0n ace*t caz. En %od *i%ilar6 un apel ctre o %etod *tatic tip.met:stat25 declaneaz cutarea %ai 0nt:i 0n tip i apoi6 dac %ai e*te nece*ar6 0n *upertipurile lui tip. ,ubtipul tip:sub nu e*te parcur*.

Substituirea tipurilor 4n ierarhia de tipuri


Entr@o ierar1ie de tipuri6 *ubtipurile reprezint di!erite variante ale tipului rdcin. e e7e%plu6 tipurile t:artist i t:autor de!inite anterior *unt variante ale tipului t:persoana. #ipul de baz include *ubtipurile6 0n *en*ul c orice autor *au arti*t e*te o per*oan. ac *e lucreaz cu o ierar1ie de tipuri6 atunci *unt nece*are %ecani*%e pentru a !ace re!erin la di!erite niveluri de *pecializare6 !ie la cel %ai )eneral nivel 2de e7e%plu6 * *e *electeze *au * *e %odi!ice toate per*oanele56 !ie la niveluri particulare 2de e7e%plu6 * *e *electeze *au %odi!ice doar autorii *au doar per*oanele care nu *unt autori5. (roprietatea de poli%or!i*% per%ite *electarea tuturor obiectelor de un anu%it tip 2de e7e%plu t:persoana5 i obinerea at:t a obiectelor de tipul re*pectiv 2 t:persoana56 c:t i a obiectelor al cror tip declarat e*te un *ubtip al ace*tui tip 2 t:artist6 t:autor *au t:"urnalist5. Acea*t proprietate

Orientare pe obiecte n Oracle9i

'"

*e nu%ete *ub*tituibilitate. ac un *upertip e*te *ub*tituibil6 atunci variabilele6 coloanele i atributele de acel tip pot conine at:t obiecte de tipul re*pectiv6 c:t i in*tane obiect core*punztoare *ubtipurilor ace*tuia. ,upertipurile *unt *ub*tituibile deoarece un *ubtip e*te doar o variant *pecializat a *upertipurilor *ale 2directe *au indirecte5. in punct de vedere !or%al6 un *ubtip e*te un tip de *ine *tttor. e aceea6 o coloan care conine in!or%aii de*pre toate per*oanele6 inclu*iv de*pre cele care nu *unt autori *au artiti6 de !apt *toc1eaz date de %ai %ulte tipuri. ,ub*tituibilitatea *e aplic la atribute6 coloane i linii obiect 2din vizualizri *au tabele obiect56 colecii *au re!erine ctre obiecte. Atributele obiectelor6 ele%entele coleciilor i re!erinele *unt 0ntotdeauna *ub*tituibile. ac t e*te un tip obiect6 atunciF un atribut *ub*tituibil de tip re!erin ctre un obiect de tip t poate conine re!erine at:t ctre o in*tan a tipului t6 c:t i ctre o in*tan a unui *ubtip al tipului tG un atribut de tipul t poate conine at:t in*tane obiect de tip t6 c:t i in*tane ale unui *ubtip al tipului tG o colecie de ele%ente de tip t poate conine at:t in*tane obiect de tip t6 c:t i in*tane ale oricrui *ubtip core*punztor tipului t. Nu e7i*t o *inta7 la nivelul de!iniiei tipului pentru a con*tr:n)e *ub*tituibilitatea unui anu%e *ubtip. &7i*t po*ibilitatea de a activa *au dezactiva *ub*tituibilitatea la nivel de *tocare pentru anu%ite coloane *au tabele obiect. E0e1pl27 , *e de!inea*c tipul t:sursa 0n care atributul autor * !ie *ub*tituibil.
CREATE TYPE t_sursa AS OBJECT ( tit u VARCHAR2(30), aut"r t_pers"ana &H su#stitui#i &

H&)%

O in*tan a tipului t:sursa conine titlul i autorul6 care e*te de tip t:persoana *au de orice alt *ubtip al tipului t:persoana. +r%torul e7e%plu *peci!ic un autor de tip t:artistF
SE0ECT t_sursa(6,"a ,"a6, t_artist(223!+, 67au'ain6, 223, 62;3<6, 62<0:6, 6*ran(e4a6)) 1RO. )ua %

8oloanele i liniile obiect *unt 0n %od i%plicit *ub*tituibile. 8u alte cuvinte6 o coloan *au linie de tip obiect t poate conine in*tane ale tipului t *au ale oricruia dintre *ubtipurile *ale. E0e1pl27 ,e con*ider ierar1ia t:persoana cu *ubtipurile t:autor i t:artist. #ipul t:autor are la r:ndul lui un *ubtip t:"urnalist. +n tabel obiect de tip t:persoana poate conine linii de tip t:persoana *au de unul dintre *ubtipurile ace*tuia. (entru a introduce un autor de un tip dat *e utilizeaz6 0n clauza &0)<>S a co%enzii I1S>/?6 con*tructorul *peci!ic tipului re*pectiv.
CREATE 5,SERT VA0-ES 5,SERT VA0-ES 5,SERT VA0-ES TAB0E ta#_pers"ane O1 t_pers"ana% 5,TO ta#_pers"ane (t_pers"ana (2+, 67e"r'es(u6))% 5,TO ta#_pers"ane (t_aut"r (2+, 65r$in' St"ne6, 22+, 6s(riit"r6, ,-00))% 5,TO ta#_pers"ane (t_Burna ist (3+, 6Sim"na P"pes(u6, 23+, 6Burna ist6, ,-00, 6re)a(t"r6, 6/i ema6))%

''

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

En %od *i%ilar *e lucreaz 0ntr@un tabel *au vizualizare relaional pentru o coloan *ubtituibil de tip t:persoana. +r%torul e7e%plu in*ereaz 0n tabelul relaional tab:surse in!or%aii de*pre o per*oan6 un autor i un jurnali*t.
CREATE TAB0E ta#_surse O1 t_sursa% 5,SERT 5,TO ta#_surse VA0-ES(6Cr"ni(a )e a4i6, t_pers"ana(2+, 67e"r'es(u6))% 5,SERT 5,TO ta#_surse VA0-ES(6A'"nie si eEta46, t_aut"r (2+, 65r$in' St"ne6, 22+, 6s(riit"r6, ,-00))% 5,SERT 5,TO ta#_surse VA0-ES(6EEp"4itii6, t_Burna ist (3+, 6Sim"na P"pes(u6, 23+, 6Burna ist6, ,-00, 6re)a(t"r6, 6/i ema6))%

En )eneral6 atributele pot !i acce*ate utiliz:nd notaia cu punct. En cazul atributelor unui *ubtip al tipului declarat6 *e utilizeaz !uncia ?/>0?. E0e1pl27 Entr@o vizualizare obiect 6i :surse de tip t:sursa 20n care coloana autor conine in*tane ale oricrui tip din ierar1ia cu rdcina t:persoana56 *e poate utiliza !uncia ?/>0? 0%preun cu predicatul IS OG ?@3> 2O1)@B5 pentru a a!ia titlurile tuturor crilor i in!or%aiile le)ate nu%ai de autorii de tip t:artist.
5,SERT 5,TO ta#_surse VA0-ES (6,"a ,"a6, t_artist(223!+, 67au'ain6, 223, 62;3<6, 62<0:6, 6*ran(e4a6))% CREATE V5E? $i4_surse O1 t_sursa AS SE0ECT H 1RO. ta#_surse% SE0ECT TREAT(aut"r AS t_artist), tit u 1RO. $i4_surse ?HERE aut"r 5S O1 TYPE (O,0Y t_artist)%

+n *ubtip poate !i *tocat 0n orice tabel *au coloan *ub*tituibil a*ociat *upertipurilor *ale directe *au indirecte6 at:t 0n cele care e7i*t deja la %o%entul de!inirii lui6 c:t i 0n cele care ur%eaz a !i create. e a*e%enea6 e7i*t po*ibilitatea ca un *ubtip * aib un atribut de tipul *upertipului din care a !o*t e7tin*. ,e creeaz a*t!el o re!erin 0ncruciat care co%plic %ecani*%ele de tratare a obiectelor. E0e1pl27 , *e adau)e tipului t:autor un nou atribut6 impresar6 de tip t:persoana.
A0TER TYPE t_aut"r A// ATTR5B-TE impresar t_pers"ana CASCA/E%

8oloanele av:nd un tip care 0i re!er *upertipul nu *unt *ub*tituibile6 iar tipul re*pectiv nu poate !i utilizat pentru tabele obiect. in acea*t cauz6 co%anda anterioar !uncioneaz doar dup ter)erea tabelelor tab:persoane i tab:surse. En caz contrar6 apare eroarea H O/083'$%(F cannot create column or table o+ t=pe that contains a supert=pe attribute I. En %od *i%ilar6 un *ubtip st poate avea un atribut de tip colecie ale crui ele%ente *unt de unul dintre *upertipurile *ubtipului st. Nici coloanele de ace*t tip nu *unt *ub*tituibile. e e7e%plu6 dac t:autor conine un tabel i%bricat *au un vector de ele%ente de tip t:persoana6 atunci o coloan de tip t:autor nu va !i *ub*tituibil. En *c1i%b6 *e pot de!ini coloane *ub*tituibile core*punztoare

Orientare pe obiecte n Oracle9i

')

*ubtipurilor care au atribute de tip re!erin ctre *upertipurile lor. 8oloanele i atributele de tip re!erin *unt *ub*tituibile at:t 0n tabele6 c:t i 0n vizualizri. e e7e%plu6 0ntr@o vizualizare *au un tabel6 o coloan de tip re!erin ctre tipul t:persoana poate conine re!erine ctre in*tane obiect de ace*t tip *au de oricare dintre *ubtipurile *ale. &le%entele coleciilor *unt i ele *ubtituibile at:t 0n tabele6 c:t i 0n cadrul vizualizrilor. e e7e%plu6 un tablou i%bricat de obiecte de tip t:persoana poate conine in*tane obiect de tip t:persoana *au de oricare dintre *ubtipurile *ale. ,ub*tituibilitatea unei coloane6 a unui atribut *peci!ic unui tip i a unei colecii i%bricate la orice nivel6 *e poate dezactiva cu ajutorul clauzei 1O? S<*S?I?<?0*)> 0? 0)) )>&>)S. E0e1pl27 , *e de!inea*c un tabel relaional catalog6 *i%ilar tabelului tab:surse. 8oloana autor trebuie * *toc1eze doar in*tane de tip t:persoana i * nu per%it in*tane ale *ubtipurilor ace*tui tip.
CREATE TAB0E (ata "' ( sursa VARCHAR2(20), aut"r t_pers"ana, pret ,-.BER) CO0-., aut"r ,OT S-BST5T-TAB0E AT A00 0EVE0S%

En cazul tabelelor obiect6 clauza poate !i aplicat 0ntre)ului tabel.


CREATE TAB0E ta#_surse_pers"ane O1 t_sursa ,OT S-BST5T-TAB0E AT A00 0EVE0S%

, *e de!inea*c tabelul curente6 *peci!ic:nd c ele%entele obiectuale ale coleciei artisti nu *unt *ub*tituibile.
CREATE TYPE t_ ista_artisti AS TAB0E O1 t_artist% & CREATE TAB0E (urente ( nume VARCHAR2(20), artisti t_ ista_artisti) ,ESTE/ TAB0E artisti ,OT S-BST5T-TAB0E AT A00 0EVE0S STORE AS ts_artisti%

Ob%er!a6ii7 Nu e7i*t nici un %ecani*% pentru dezactivarea *ub*tituibilitii coloanelor re!erin. 8lauza de *ub*tituibilitate nu poate !i aplicat unui atribut al unui tip obiect. O coloan trebuie * !ie pe nivelul cel %ai 0nalt din ierar1ie pentru a i *e putea aplica opiunea 1O? S<*S?I?<?0*)> 0? 0)) )>&>)S. ,e poate i%pune o con*tr:n)ere care * li%iteze do%eniul tipurilor per%i*e 0ntr@o coloan *au atribut obiect6 la un *in)ur *ubtip din ierar1ia de tipuri a*ociat. Ace*t lucru *e !ace utiliz:nd o con*tr:n)ere de tip IS OG i cuv:ntul c1eie O1)@. (entru o coloan obiect *e poate utiliza at:t con*t:n)erea IS OG6 c:t i 1O? S<*S?I?<?0*)> 0? 0)) )>&>)S6 dar nu a%bele. E0e1pl27 , *e creeze un tabel de tip t:sursa 0n care autorii trebuie * !ie de tip t:autor. 81iar dac tipul t:sursa per%ite autori de tip t:persoana6 declararea coloanei i%pune nu%ai *tocarea in*tanelor obiect de tip t:autor.

',

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

CREATE TAB0E surse_#i# i"'ra*i(e O1 t_sursa CO0-., aut"r 5S O1 (O,0Y t_aut"r)%

9e)ulile de atribuire dintre tipuri *e aplic 0n cadrul co%enzilor I1S>/?6 <3.0?>6 clauzei />?</1I1#6 para%etrilor !unciilor i variabilelor 3)4S2). Aa cu% *@a ob*ervat6 *ub*tituibilitatea e*te proprietatea unui *ubtip de a 0nlocui pe unul dintre *upertipurile lui 0ntr@un conte7t dat. =a o 0ncercare de a e7ecuta o *ub*tituie 0n alt direcie 2*ub*tituirea unui *ubtip cu un *upertip al *u5 apare o eroare de co%pilare. 8:nd *e atribuie 0n %od direct unei coloane *au variabile de tip tip:tinta o valoare obiect de tip tip:sursa6 trebuie 0ndeplinit una dintre *ituaiile ur%toareF tip:sursa i tip:tinta * aib acelai tipG tip:sursa * !ie un *ubtip al tipului tip:tinta. 8el de@al doilea caz de!inete proce*ul de lr)ire 2 Midening56 o atribuire 0n care tipul declarat al *ur*ei e*te %ai *peci!ic dec:t tipul declarat al intei. e e7e%plu6 ace*t proce* e*te 0nt:lnit atunci c:nd i *e atribuie unei variabile de tip t:persoana o in*tan de tip t:artist. .ntuitiv6 un arti*t poate !i privit ca !iind o per*oan. #ipul t:artist e*te un tip t:persoana de!init %ai *trict6 a*t!el 0nc:t * *e poat *toca in!or%aii *peci!ice unui arti*t acolo unde *e ateapt in!or%aii de*pre o per*oan. (roce*ul de lr)ire e*te utilizat atunci c:nd atributele *upli%entare dintr@ un *ubtip nu *unt con*tr:n*e * !ie di!erite de null. e e7e%plu6 atribuirea unei valori de tip t:artist unei variabile de tip t:persoana *e poate !ace doar dac atributele cod:artist6 an:nastere6 an:moarte i nationalitate pot !i null. #oi artitii *unt per*oane6 a*t!el 0nc:t a*ocierea prin lr)ire va !unciona 0ntotdeauna corect. E0e1pl27 (entru a ilu*tra atribuirea prin lr)ire6 *e con*ider ur%torul tabel.
CREATE TAB0E ta#e ( pers(" t_pers"ana, art(" t_artist, aut(" t_aut"r)% 5,SERT 5,TO ta#e (pers(" , art(" , aut(" ) VA0-ES (t_pers"ana (2+, 67e"r'es(u6), t_artist (20, 6Peter Breu'e 6, 22, 62!+96, ,-00, ,-00), t_aut"r (2+, 65r$in' St"ne6, 22+, 6s(riit"r6, ,-00))%

+r%torul e7e%plu !olo*ete atribuirea prin lr)ire. .n*truciunile *unt valide doar dac perscol e*te *ub*tituibil. En S2)F
-P/ATE ta#e SET pers(" A art(" %

En 3)4S2)F
/EC0ARE $ar2 t_pers"ana% $ar2 t_artist% BE75, $ar2 IA $ar2% E,/% &

Orientare pe obiecte n Oracle9i

'0

ac e*te nece*ar o *ub*tituire 0n *en*ul inver* celui obinuit 2o valoare de un anu%it tip * !ie con*iderat de un *upertip al tipului declarat56 atunci *e poate utiliza proce*ul reciproc6 de lr)ire 2narroMing5. Ace*ta i%plic tratarea unui obiect de un tip %ai )eneral 2de e7e%plu6 t:persoana56 ca !iind de un tip *pecializat 2de e7e%plu6 t:artist5. Nu toate per*oanele *unt artiti6 a*t!el 0nc:t o atribuire 0n care tipul variabilei int e*te t:artist i tipul obiectului *ur* e*te t:persoana !uncioneaz doar dac obiectul re*pectiv e*te de tip t:artist. (entru a !ace o atribuire prin li%itare6 trebuie utilizat !uncia ?/>0? care convertete 0n %od e7plicit valorea *ur* la tipul *pecializat al variabilei *au coloanei int. /uncia ?/>0? veri!ic dac *c1i%barea poate !i !cut6 la %o%entul e7ecuiei6 dup care !ie realizeaz conver*ia i returneaz o e7pre*ie de tipul *peci!icat 0n opiunea 0S6 !ie returneaz valoarea null dac valoarea *ur* nu e*te de tipul int *au de un *ubtip al ace*tuia. E0e1pl27 , *e atribuie coloanei perscol de tip t:persoana valorile coloanei artcol de tip t:artist. (entru !iecare valoare din coloana perscol6 atribuirea *e !ace cu *ucce* doar dac per*oana re*pectiv e*te arti*t. En caz contrar6 !uncia ?/>0? returneaz valoarea null.
-P/ATE ta#e SET art(" A TREAT (pers(" AS t_artist)%

+r%toarea co%and 0ncearc * !ac o atribuire prin li%itare !r a *c1i%ba 0n %od e7plicit tipul valorii *ur*6 ceea ce nu e*te per%i*. 8o%anda va deter%ina apariia erorii H O/08''932F inconsistent datat=pesF eCpected S?<.>1?.?:0/?IS? got S?<.>1?.?:3>/SO010I.
-P/ATE ta#e SET art(" A pers(" %

En atribuirile e7pre*iilor de tip colecie6 tipul ele%entelor core*punztoare tipului *ur* i inta trebuie * !ie acelai. =a nivel de colecie6 nu *unt per%i*e nici atribuiri prin lr)ire i nici prin li%itare. &vident 0n*6 c atribuirile de la nivelul ele%entelor unei colecii re*pect re)ulile de *ub*tituibilitate prezentate anterior. E0e1pl27 , *e creeze dou tipuri tablou i%bricat cu ele%ente de tip t:persoana6 re*pectiv t:autor. Atribuirea dintre dou e7pre*ii colecie de tipuri di!erite nu e*te per%i*6 dar *e poate realiza *ub*tituirea la nivel de ele%ent 2elem2 e*te utilizat 0n con*tructorul tipului colecie t:lista:persoane6 realiz:ndu@*e 0n ace*t !el la nivel de ele%ent6 un proce* de lr)ire5.
CREATE TYPE t_ ista_pers"ane AS TAB0E O1 t_pers"ana% & CREATE TYPE t_ ista_aut"ri AS TAB0E O1 t_aut"r% & /EC0ARE $ar2 t_ ista_pers"ane% $ar2 t_ ista_aut"ri% e em2 t_pers"ana% e em2 t_aut"r% BE75, >>$ar2 IA $ar2% &H,EPER.5S > (" e(tii e nu au a(e asi tip H& $ar2 IA t_ ista_pers"ane (e em2, e em2)% &HPER.5S > e em2 este )e un su#tip a tipu ui )e( arat H&

)1
E,/% &

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

Co(paraiile 4ntr:o ierarhie de tipuri


ou in*tane obiect pot !i co%parate doar dac au acelai tip *au una are *ubtipul celeilalte. (entru acea*ta *unt !olo*ite %etodele de tip ;03 i O/.>/6 care a*i)ur %ecani*%ul de co%parare a obiectelor. ac *e de!inete o %etod de co%parare6 ea e*te apelat 0n %od auto%at atunci c:nd obiecte de acel tip *au de *ubtipuri ale ace*tuia trebuie * !ie co%parate. e a*e%enea6 dou variabile re!erin pot !i co%parate doar dac valorile obiectuale ale ace*tora *unt de acelai tip *au dac una are un *ubtip al celeilalte. Nu e7i*t nici un %ecani*% pentru co%pararea coleciilor luate unitar. E0e1pl27 , *e de!inea*c o %etod de co%parare de tip ;03 pentru obiectele de tip t:persoana. , *e *electeze din tabelul tab:surse titlurile *ur*elor biblio)ra!ice6 codurile i nu%ele per*oanelor care le@ au publicat. 9ezultatul trebuie * apar 0n ordinea dat de %etoda ;03 de!init 0n cadrul tipului.
A0TER TYPE t_pers"ana A// .AP .E.BER 1-,CT5O, map_(") RET-R, ,-.BER CASCA/E% CREATE OR REP0ACE TYPE BO/Y t_pers"ana 5S .AP .E.BER 1-,CT5O, map_(") RET-R, ,-.BER 5S BE75, RET-R, SE01=(")% E,/ map_(")% E,/% & SE0ECT tit u, s=aut"r=("), s=aut"r=nume 1RO. ta#_surse s OR/ER BY aut"r=map_(")()%

Orientare pe obiecte n Oracle9i

)1

4. ;estiunea obiectelor 4n Oracle


Odat cu apariia caracteri*ticilor obiectuale6 a !o*t nece*ar i introducerea unor %ijloace de prelucrare a ace*tora. Ace*t capitol prezint e7ten*iile S2) i 3)4S2) pentru lucrul cu obiecte6 re*pectiv c:teva dintre %odalitile *peci!ice de i%ple%entare a te1nicilor de *tocare i prelucrare6 cu re!erire la datele obiectuale.

4.1. &odi%icarea dina(ic a tipurilor


Modi!icarea dina%ic a *tructurii *au a co%porta%entului unui tip de!init de utilizator e*te o caracteri*tic nou a ver*iunii Oracle9i i *e nu%ete t=pe e6olution. ,unt per%i*e ur%toarele *c1i%briF adu)area *au eli%inarea de atribute i %etodeG %odi!icarea tipului de date al unui atribut prin %rirea lun)i%ii6 a preciziei *au a do%eniuluiG *c1i%barea proprietilor GI10) *au I1S?01?I0*)> ale tipului. Modi!icrile unui tip a!ecteaz toate obiectele care *unt 0n relaie cu el. e e7e%plu6 dac *e adau) un atribut unui tip obiect6 datele din coloanele de acel tip trebuie * !ie a!iate a*t!el 0nc:t * includ noul atribut. Obiectele dependente de un tip *unt acele obiecte ale *c1e%ei care re!er 0n %od direct *au indirect tipul re*pectiv. &le trebuie * re!lecte orice *c1i%bare a ace*tuia i pot !iF tabele6 tipuri *au *ubtipuri6 blocuri 3)4S2) *tocate 2proceduri6 !uncii6 pac1ete *au declanatori56 tipuri inde76 vizualizri6 indeci bazai pe !uncii6 operatori de!inii de utilizator etc. Modalitatea 0n care un obiect dependent e*te a!ectat de o *c1i%bare a tipului de care depinde di!er 0n !uncie de natura *c1i%brii. Atunci c:nd un tip e*te %odi!icat6 toate obiectele dependente *unt %arcate invalide. +r%toarea re!erire a unui obiect invalidat duce la reco%pilarea ace*tuia6 utiliz:nd noua de!iniie a tipului %odi!icat. ac obiectul e*te reco%pilat cu *ucce*6 atunci el devine valid i poate !i !olo*it. En !uncie de *c1i%barea !cut a*upra tipului6 indecii bazai pe !uncii pot !i eli%inai *au deza!ectai i trebuie recon*truii. Modi!icrile de *tructur ale tipurilor *e e7ecut rapid pentru c deter%in doar *c1i%barea %etadatelor core*punztoare tabelelor dependente. +lterior trebuie actualizate datele din tabele6 con!or% noului !or%at. eoarece %odi!icarea datelor poate !i con*u%atoare de ti%p6 ver*iunea Oracle9i prevede6 0n cadrul co%enzii 0)?>/ ?0*)>6 opiuni care per%it utilizatorului * alea) 0ntre convertirea datelor din tabelele dependente la %o%entul *c1i%brii tipului *au ulterior6 pe %*ur ce ace*tea *unt acce*ate *au %odi!icate. 81iar dac datele *unt *tocate 0n !or%atul vec1i6 la !iecare con*ultare *i*te%ul !ace conver*ia ctre cel %ai recent !or%at. Modul de *tocare nu e*te actualizat p:n la actualizarea *au conver*ia e7plicit a datelor re*pective. e!iniia cea %ai recent a unui tip poate !i obinut din vizualizarea <S>/:SO</C>6 iar de!iniiile tuturor ver*iunilor unui tip pot !i *electate din <S>/:?@3>:&>/SIO1S. e a*e%enea6 pentru a a!la toate obiectele *c1e%ei care depind de un anu%it tip6 *e con*ult vizualizarea <S>/:.>3>1.>CI>S.

)2

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

E0e1pl27 a5 , *e li*teze nu%ele6 tipul i tipul dependenei pentru obiectele *c1e%ei care depind de tipul t:artist.
SE0ECT ,A.E, TYPE, RE1ERE,CE/_,A.E, /EPE,/E,CY_TYPE 1RO. -SER_/EPE,/E,C5ES ?HERE -PPER(RE1ERE,CE/_,A.E) A 6T_ART5ST6%

b5 , *e a!ieze pentru !iecare tip de!init de utilizator nu%ele ace*tuia i nu%rul de ver*iuni de!inite p:n la %o%entul curent.
SE0ECT TYPE_,A.E, CO-,T(/5ST5,CT VERS5O,T) 1RO. -SER_TYPE_VERS5O,S 7RO-P BY TYPE_,A.E%

Co(anda ALTER T'PE


(entru %odi!icarea *tructurii *au co%porta%entului unui tip de!init de utilizator *e !olo*ete co%anda 0)?>/ ?@3>. e a*e%enea6 acea*t co%and ).. per%ite reco%pilarea *peci!icaiei *au a corpului tipului re*pectiv i *c1i%barea anu%itor proprieti 2 GI10)6 I1S?01?I0*)>5. (entru iniierea unei a*t!el de co%enzi6 tipul obiect trebuie * !ie de!init 0n propria *c1e% i utilizatorul * aib privile)iile *i*te% C/>0?> ?@3> *au C/>0?> 01@ ?@3>. ac tipul de %odi!icat nu *e a!l 0n *c1e%a curent6 utilizatorul trebuie * dein i privile)iul 0)?>/ 01@ ?@3>. ,inta7a *i%pli!icat a co%enzii 0)?>/ ?@3> e*teF ALTER T'PE 3schema.4nume:tip K CO.PILE 3DEB(-4 3 KSPECI+ICATION L BOD'M 4 3RE(SE SETTIN-S4 L REPLACE 3 KA(T) C(RRENT*(SER L DE+INERM 4 AS OB ECT 2atribut tip:de:date 3- atribut tip:de:dateB4 metoda:spec 3- metoda:specB4 5 L K KADD L DROPM metoda:spec 36 metoda:specB4 L K KADD L .ODI+'M ATTRIB(TE Katribut 3tip:de:date4 L 2atribut tip:de:date 36 atribut tip:de:dateB4 5 M L DROP ATTRIB(TE Katribut L 2atribut 36 atributB4 5 M L 3NOT4 KINSTANTIABLE L +INALM M 3 K IN,ALIDATE L CASCADE 3 K 3NOT4 INCL(DIN- TABLE DATA L CON,ERT TO S(BSTIT(TABLEM 4 3 3+ORCE4 E7CEPTIONS INTO 3schema.4tabelM 4 M (entru a valida 0n %od e7plicit un tip6 *e utilizeaz clauza CO;3I)>6 care deter%in co%pilarea *peci!icaiei *au corpului tipului. En %od i%plicit6 *unt co%pilate a%bele6 dar e*te po*ibil co%pilarea doar a corpului 2 *O.@5 *au a *peci!icaiei 2S3>CIGIC0?IO15 pentru tipul re*pectiv. =a reco%pilare6 *i*te%ul eli%in *etrile co%pilatorului6 le 0ncarc pe cele din *e*iunea curent i6 la !inalul co%pilrii6 revine la para%etrii iniiali. (entru a evita ace*t proce*6 care poate !i ine!icient6 *e precizeaz clauza /><S> S>??I1#S. +n tip e*te co%pilat cu *ucce* dac toate tipurile de care depinde *unt valide i dependenele *unt *ati*!cute. ac din reco%pilarea unui tip rezult erori6 ace*ta r%:ne invalid. #oate pro)ra%ele 3)4S2) care conin variabile de!inite cu atributul P/OA?@3> relativ la un tabel obiect *au P?@3>

Orientare pe obiecte n Oracle9i

)3

relativ la o coloan6 re*pectiv atribut de tip obiect6 *unt reco%pilate pe baza ulti%ei ver*iuni a tipului. ac revalidarea eueaz6 atunci i co%pilarea blocului 3)4S2) eueaz. 8lauza .>*<# *e !olo*ete pentru a i%pune co%pilatorului 3)4S2) * )enereze i * *toc1eze codul 0n vederea utilizrii lui de ctre depanatorul 3)4S2). 8lauza />3)0C> 0S O*5>C? per%ite adu)area de noi *peci!icaii pentru atribute i %etode. ,e poate rede!ini 0ntre) tipul obiect 0n %od *i%ilar unei co%enzi C/>0?> ?@3>. Acea*t clauz e*te valid doar pentru tipurile obiect6 nu i pentru tipurile colecii. En aceeai co%and 0)?>/ ?@3> *e pot adu)a6 ter)e *au %odi!ica %ai %ulte atribute *au %etode6 dar !iecare atribut *au %etod poate aprea o *in)ur dat. En cazul adu)rii *au ter)erii unei %etode6 *i*te%ul deza!ecteaz orice inde7 bazat pe !uncii care depinde de acel tip. Adu)area de %etode *au atribute nu trebuie * intre 0n con!lict cu cele deja e7i*tente 0n ierar1ia de tipuri. O %etod %otenit nu poate !i tear* dintr@un *ubtip6 ea trebuie eli%inat direct din *upertipul care o de!inete *au o *upra*crie. ac %etoda eli%inat nu e*te *upra*cri* 0n *ubtipuri6 eli%inarea ei *e realizeaz utiliz:nd opiunea C0SC0.> i deter%in ter)erea %etodei at:t din tipul int c:t i din toate *ubtipurile ace*tuia. ac o %etod e*te *upra*cri* 0n cadrul *ubtipurilor6 atunci operaia de ter)ere a ace*teia eueaz6 iar co%anda de %odi!icare e*te anulat. (entru ca operaia de eli%inare cu propa)are a *c1i%brilor * *e e7ecute cu *ucce*6 e*te nece*ar ca %ai 0nt:i * !ie eli%inate toate *upra*crierile %etodei din *ubtipuri i abia apoi6 * !ie eli%inat %etoda din tipul care o de!inete. 8lauza 0.. 0??/I*<?> per%ite adu)area unui nou atribut. Nu%ele atributului trebuie * nu intre 0n con!lict cu atributele *au %etodele ierar1iei din care !ace parte tipul %odi!icat. ,i*te%ul adau) noul atribut la *!:ritul li*tei de atribute de!inite local. ac *e adau) un atribut unui *upertip6 atunci ace*ta e*te %otenit de toate *ubtipurile *ale. En *ubtipuri6 atributele %otenite preced 0ntotdeauna atributele declarate. eci6 0n ur%a unei operaii de adu)are a unor atribute a*upra unui tip care deine *ubtipuri6 e*te po*ibil * !ie nece*ar actualizarea unor operaii a*ociate *ubtipurilor 2de e7e%plu6 *e pot %odi!ica apelurile con*tructorilor a*ociai ace*tora5. ac *e eli%in un atribut prin inter%ediul clauzei ./O3 0??/I*<?>6 atunci *i*te%ul Oracle *upri% coloana core*punztoare atributului6 toi indecii6 *tati*ticile i con*tr:n)erile 2inclu*iv cele de inte)ritate re!erenial5 care !ac re!erire la atributul re*pectiv. 9e*triciile cu privire la eli%inarea atributelor pre*upun cF nu *e poate eli%ina un atribut %otenit de la un *upertip 2el trebuie ter* din *upertip i 0n ace*t !el6 0n ur% propa)rii *c1i%brilor6 va !i eli%inat i din *ubtip5G nu *e poate eli%ina un atribut care !ace parte dintr@o c1eie de partiionare6 *ubpartiionare *au din c1eia unei )rupriG nu e*te per%i* eli%inarea unui atribut care !ace parte dintr@un identi!icator obiect bazat pe c1eia pri%ar a unui tabel obiect *au dintr@o c1eie pri%ar a unui tabel or)anizat pe baz de inde7G nu *e pot ter)e toate atributele unui tip rdcin6 ci trebuie ter* tipul 0n 0ntre)i%e 2*e pot ter)e 0n*6 toate atributele de!inite local ale unui *ubtip pentru c ace*ta tip %otenete toate atributele de la *upertipul *u i deci nu%rul de atribute nu *e reduce la zero5. Modi!icarea tipului de date al unui atribut *calar e7i*tent *e !ace !olo*ind clauza ;O.IG@ 0??/I*<?>. e e7e%plu6 *e poate %ri lun)i%ea unui atribut de tip &0/CE0/2 *au precizia i do%eniul unui atribut nu%eric. Nu *e poate %ri di%en*iunea unui atribut re!erit 0ntr@un inde7 bazat pe !uncie6 inde7 de do%eniu *au c1eie a unei )rupri. E0e1pl27

)4

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

#ipul t:persoana conine atributele cod de tip 1<;*>/ i nume de tip &0/CE0/225-5. , *e adau)e un atribut core*punztor codului nu%eric per*onal 2 cnp5 i altul re!eritor la 0nli%e 2inaltime5. , *e eli%ine atributul cod i * *e %rea*c di%en*iunea nu%elui p:n la "- de caractere.
A0TER TYPE t_pers"ana A// ATTR5B-TE ((np VARCHAR2(23)), /ROP ATTR5B-TE ("), A// ATTR5B-TE ina time ,-.BER(3,2), .O/51Y ATTR5B-TE nume VARCHAR2(:0) CASCA/E%

+r%toarea co%and 0)?>/ ?@3>6 care !ace %ai %ulte %odi!icri aceluiai atribut6 e*te incorect i returneaz eroarea H 3)S8''$1(F 0ttribute4method PC<)O0/>:OCEIP can occur onl= once in an 0)?>/ ?@3> statementI.
A0TER TYPE t_pers"ana A// ATTR5B-TE ('reutate 5,TE7ER, (u "are_"(3i VARCHAR2(2+)), /ROP ATTR5B-TE (u "are_"(3i CASCA/E%

ac *e *c1i%b proprietatea GI10) a unui tip6 atunci e*te obli)atorie clauza de dependen C0SC0.> pentru a deter%ina convertirea datelor din toate coloanele i tabelele dependente. En ace*t caz6 nu e*te per%i* a%:narea conver*iei datelor cu opiunea 1O? I1C)<.I1# ?0*)> .0?0. &vident c un tip care are deja *ubtipuri de!inite nu poate !i *c1i%bat din 1O? GI10) 0n GI10). ac *e !ace %odi!icarea proprietii GI10) 0n 1O? GI10)6 ace*t lucru nece*it conver*ia obiectelor *c1e%ei care *unt dependente de tipul re*pectiv. En ace*t caz i 0n eventualitatea crerii de *ubtipuri in*taniabile6 coloanele i tabelele obiect nece*it o nou coloan care * *toc1eze identi!icatorul de tip. =a iniierea unei a*t!el de co%enzi pot aprea dou *ituaii. ac trebuie * !ie create noi tabele i coloane *ub*tituibile de tipul re*pectiv6 dar datele dependente deja e7i*tente nu trebuie * !ie *ub*tituibile6 atunci *e *peci!ic clauza C0SC0.> I1C)<.I1# ?0*)> .0?0. ,i*te%ul %arc1eaz toate coloanele i tabelele dependente 1O? S<*S?I?<?0*)> 0? 0)) )>&>)S6 a*t!el 0nc:t nu *e vor putea in*era in*tane ale viitoarelor *ubtipuri a*ociate tipului %odi!icat6 0n coloanele *au tabelele e7i*tente la %o%entul *c1i%brii. ac *c1i%barea trebuie * !ie re!lectat de toate coloanele i tabelele dependente 2at:t cele e7i*tente la %o%entul %odi!icrii c:t i cele viitoare56 atunci *e utilizeaz clauza C0SC0.> CO1&>/? ?O S<*S?I?<?0*)>. ,i*te%ul %arc1eaz toate coloanele i tabelele e7i*tente cu S<*S?I?<?0*)> 0? 0)) )>&>)S6 cu e7cepia celor care *unt %arcate e7plicit ne*ub*tituibile. (roprietatea unui tip de a !i in*taniabil indic dac pot !i con*truite in*tane ale tipului re*pectiv. &vident c nu *e poate *c1i%ba un tip obiect din I1S?01?I0*)> 0n 1O? I1S?01?I0*)> dac e7i*t deja in*tane de acel tip. 8o%porta%entul i%plicit al unei co%enzi 0)?>/ ?@3> !r clauze pentru dependen 2C0SC0.>6 I1&0)I.0?>5 e*te de a veri!ica dac e7i*t vreun obiect dependent. ac e7i*t a*t!el de obiecte co%anda e*te abandonat cu eroarea H O/0822312F must speci+= either C0SC0.> or I1&0)I.0?> optionI. 8lauzele pentru dependen in*truie*c *i*te%ul 0n le)tur cu %odalitatea de prelucrare a

Orientare pe obiecte n Oracle9i

)"

obiectelor dependente. &le *unt obli)atorii atunci c:nd tipul int are tipuri *au tabele dependente i per%it *c1i%brile 0n ca*cad 2C0SC0.>5 *au invalidarea 2I1&0)I.0?>5 obiectelor dependente. ,pre deo*ebire de C0SC0.>6 opiunea I1&0)I.0?> per%ite *i*te%ului * e7ecute %odi!icrile *peci!icate 0n co%anda 0)?>/ ?@3> !r un %ecani*% prealabil de veri!icare i de propa)are a *c1i%brilor ctre obiectele dependente. Acea*t opiune e*te %ai rapid dec:t C0SC0.>6 dar e*te %ai ri*cant6 deoarece pot aprea proble%e la revalidarea tipurilor i a tabelelor dependente. Obiectele invalidate *unt reco%pilate la %o%entul ur%torului acce*. Ace*t lucru e*te deo*ebit de i%portant6 pentru c datele dintr@un tabel invalid nu %ai pot !i acce*ate. e e7e%plu6 0n cazul eli%inrii unei %etode care e*te *upra*cri*6 *ubtipurile dependente vor r%:ne 0n *tare invalid p:n c:nd *unt %odi!icate 0n %od e7plicit i eli%inate *upra*crierile invalide. (:n atunci6 orice 0ncercare de reco%pilare pentru validare va eua. e a*e%enea6 validarea unui tabel poate eua din cauza adu)rii auto%ate a unui atribut la un tip dependent6 care deter%in depirea nu%rului %a7i% de coloane dintr@un tabel6 *au din cauza eli%inrii unui atribut !olo*it 0n c1eia de partiionare *au drept c1eie a unei )rupri. 8lauza C0SC0.> deter%in propa)area *c1i%brii ctre toate tipurile i tabelele dependente. ac nu e*te *peci!icat cuv:ntul c1eie GO/C> i apar erori la validarea obiectelor dependente6 atunci co%anda eueaz. (entru a converti ctre noua ver*iune de !or%at toate datele dependente de tipul %odi!icat ce *unt *tocate 0n baza de date6 *e utilizeaz clauza I1C)<.I1# ?0*)> .0?0. Acea*ta e*te opiunea i%plicit1-. ac tipul are tabele dependente6 atunci pentru !iecare atribut adu)at *unt create 0n cadrul ace*tor tabele una *au %ai %ulte coloane interne iniializate cu valoarea null. ,i%ilar6 pentru !iecare atribut *upri%at *unt eli%inate coloanele a*ociate ace*tuia. =a %odi!icarea tipului de date al unui atribut6 lun)i%ea6 precizia *au do%eniul coloanei a*ociate *unt *c1i%bate 0n con*ecin. ac *e utilizeaz acea*t clauz6 atunci toate *paiile tabel ce conin datele tabelelor a!ectate trebuie * !ie 0n %od citireJ*criere. ac *e *peci!c 1O? I1C)<.I1# ?0*)> .0?06 atunci *i*te%ul Oracle actualizeaz doar %etadatele a*ociate coloanei pentru a re!lecta *c1i%brile tipului6 dar nu %odi!ic datele dependente. #otui6 coloanele dependente r%:n acce*ibile i cererile ulterioare re!lect %odi!icrile tipului. 8lauza GO/C> *e *peci!ic dac *i*te%ul trebuie * i)nore erorile )enerate de proce*ul de propa)are a *c1i%brilor i * e7ecute co%anda c1iar dac nu *unt 0ndeplinite toate condiiile de validare ale obiectelor dependente. &*te po*ibil 0nre)i*trarea erorilor prute6 0n tabelul de e7cepii *peci!icat prin inter%ediul clauzei >DC>3?IO1S I1?O. Ace*t tabel trebuie * e7i*te deja 0n *c1e%a curent. &l poate !i creat utiliz:nd procedura C/>0?>:0)?>/:?@3>:>//O/:?0*)> din pac1etul prede!init .*;S:<?I)I?@. E0e1pl27 ,e pre*upune c tipul t:persoana conine atributele nume6 prenume i 6arsta. , *e %odi!ice ace*t tip prin adu)area unui atribut data:nasterii i eli%inarea atributului 6arsta. Modi!icarea trebuie * *e !ac doar cu propa)area *c1i%brilor *tructurale6 ur%nd ca datele * !ie convertite ulterior. e a*e%enea6 eventualele erori de la %odi!icarea tipului trebuie 0nre)i*trate 0n tabelul de erori e.
/ROP TYPE t_pers"ana 1ORCE% /ROP TAB0E ta#_pers"ane 1ORCE% CREATE OR REP0ACE TYPE t_pers"ana AS OBJECT ( prenume VARCHAR(30),
1-

8lauza e*te obli)atorie dac datele coloan *unt 0n !or%atul i%a)ine Oracle, *au *c1i%barea ce *e !ace a*upra tipului e*te de la GI10) la 1O? GI10).

)'
nume $arsta VARCHAR(30), ,-.BER(3))%

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

& CREATE TAB0E ta#_pers"ane O1 t_pers"ana% 5,SERT 5,TO ta#_pers"ane VA0-ES (t_pers"ana(65"n6, 65"nes(u6, +0))% SE0ECT VA0-E(p) 1RO. ta#_pers"ane p% EFEC /B.S_-T505TY=CREATE_A0TER_TYPE_ERROR_TAB0E(6ST-/E,T6,6E6)% A0TER TYPE t_pers"ana A// ATTR5B-TE ()ata_nasterii /ATE), /ROP ATTR5B-TE $arsta CASCA/E ,OT 5,C0-/5,7 TAB0E /ATA 1ORCE EFCEPT5O,S 5,TO E% SE0ECT H 1RO. ta#_pers"ane%

En ur%a co%enzii 0)?>/ ?@3> datele din tabelul tab:persoane nu *unt convertite6 i totui *i*te%ul le returneaz con!or% ulti%ei ver*iuni de !or%at. Noul atribut adu)at e*te iniializat cu valoarea null. O co%and S>)>C? nu deter%in conver*ia !izic a datelor rezultate6 ctre cel %ai recent !or%at6 c1iar dac ace*tea 0ntrune*c condiiile nece*are pentru a !i convertite. e aceea6 dac ace*te date *unt acce*ate !recvent6 e*te pre!erabil * *e per%anentizeze conver*ia. A*t!el6 *e evit conver*iile repetate6 redundante i con*u%atoare de ti%p 20n cazul datelor de tip vector6 atunci c:nd proce*ul de conver*ie e*te 0ndelun)at6 per%anentizarea e*te obli)atorie5. atele dependente *unt a!ectate doar de %odi!icrile *tructurale care pot !i !cute a*upra unui tip. e e7e%plu6 *c1i%brile care *e li%iteaz la i%ple%entarea unei %etode deja e7i*tente a tipului nu a!ecteaz datele dependente. ,c1i%brile *tructurale ale unui tip *unt ur%toareleF adu)area *au eli%inarea unui atributG %odi!icarea lun)i%ii6 preciziei *au do%eniului unui atributG *c1i%barea clauzei GI10) a tipului. Ace*te *c1i%bri duc la noi ver*iuni ale tipului %odi!icat i ale tipurilor dependente i nece*it adu)area6 eli%inarea *au %odi!icarea coloanelor interne ale tabelelor dependente6 0n ti%pul proce*ului de convertire ctre noua ver*iune. Atunci c:nd *unt !cute *c1i%bri *tructurale a*upra unui tip care are obiecte dependente6 e!ectele propa)rii nu *e li%iteaz doar la %etadate6 ci a!ecteaz i con!i)uraia *tocrii datelor. &7i*t %ai %ulte ci de conver*ie a datelor dependenteF pe %*ura reactualizrii datelorG la %odi!icarea tipului6 pentru anu%ite coloane *au tabele dependenteG la %odi!icarea tipului6 pentru toate datele dependente. e a*e%enea6 operaia de %odi!icare dina%ic a unui tip deter%in i alte *c1i%bri ce trebuie prevzute i tratate. e e7e%plu6 dac *e adau) un nou atribut unui tip6 atunci !iecare apel al con*tructorului trebuie %odi!icat a*t!el 0nc:t * *peci!ice o valoare pentru acel atribut. ac *e adau) o nou %etod6 atunci corpul tipului trebuie 0nlocuit i adu)at o i%ple%entare pentru acea %etod

Orientare pe obiecte n Oracle9i

))

2utiliz:nd co%anda C/>0?> O/ />3)0C> ?@3> *O.@5. Nu e*te di*ponibil o co%and 0)?>/ ?@3> *O.@ pentru %odi!icarea corpului unui tip.

Opiunile co(en!ii ALTER TABLE pentru (odi%icarea tipurilor


En cadrul proce*ului de %odi!icare dina%ic a unui tip av:nd tabele dependente e*te util i co%anda 0)?>/ ?0*)>. Acea*ta prevede opiuni pentru convertirea datelor ctre cel %ai recent !or%at al tipurilor re!erite. En ace*t conte7t6 *inta7a *i%pli!icat a co%enzii e*te ur%toareaF ALTER TABLE 3schema.4nume:tabel K(P-RADE 3 3NOT4 INCL(DIN- DATA4 L DROP (N(SED COL(.NS < clau :stocare:coloanM 8lauza <3#/0.> per%ite conver*ia %etadatelor unui tabel a*t!el 0nc:t ace*tea * *e con!or%eze cu cele %ai recente ver*iuni ale tipurilor re!erite. ac tabelul e*te deja valid6 atunci %etadatele core*punztoare r%:n ne*c1i%bate. Opiunea I1C)<.I1# .0?0 e*te *i%ilar cu cea din co%anda 0)?>/ ?@3> i deter%in conver*ia datelor *tocate 0n coloanele de tip de!init de utilizator ctre cele %ai recente ver*iuni de tipuri. Acea*t opiune e*te i%plicit. ;er*iunea ne)at a opiunii la* datele coloanelor 0n !or%atul curent. e e7e%plu6 dac un atribut e*te eli%inat dintr@un tip re!erit de un tabel6 atunci coloanele core*punztoare atributului *upri%at nu *unt eli%inate din tabel. ,unt actualizate doar %etadatele re!eritoare la coloana re*pectiv6 a*t!el 0nc:t * re!lecte !aptul c atributul re*pectiv nu %ai e*te !olo*it. ac atributul eli%inat e*te *tocat 0n a!ara 0nre)i*trrii 2 out8o+8line5 cu% e*te de e7e%plu6 un atribut de tip colecie *au )O*6 atunci datele core*punztoare atributului re*pectiv nu *unt eli%inate. /olo*ind acea*t opiune6 *e poate accelera viteza actualizrii %etadatelor re!eritoare la tabel 0n %o%entul %odi!icrii tipului. En *c1i%b6 *electarea in!or%aiilor va nece*ita de !iecare dat conver*ia datelor *tocate 0n coloane6 ctre cel %ai recent !or%at. Ace*t lucru poate a!ecta per!or%anele unor intero)ri *ucce*ive a*upra tabelelor dependente. (entru a eli%ina coloanele ne!olo*ite *e utilizeaz clauza ./O3 <1<S>. CO)<;1S. Opiunea 1O? I1C)<.I1# .0?0 e*te obli)atorie atunci c:nd tabelele *unt !oarte %ari i capacitatea *e)%entelor de revenire e*te prea %ic pentru a realiza conver*ia tuturor datelor 0ntr@o *in)ur tranzacie. 8u% acea*t opiune pre*upune doar %odi!icarea %etadatelor tabelului6 nu e*te nece*ar ca toate *paiile tabel a*ociate * !ie di*ponibile 0n %od citireJ*criere . En ace*t caz6 conver*ia datelor din !iecare tabel dependent poate !i !cut 0n tranzacii *eparate6 la un %o%ent ulterior6 utiliz:nd clauza <3#/0.> I1C)<.I1# .0?0. O alt %odalitate de convertire a datelor e*te doar propa)area *c1i%brilor 0n %etadatele a*ociate tabelelor dependente !r convertirea datelor. En ace*t caz6 propa)area *c1i%brilor la nivel de date poate !i realizat treptat6 pentru !iecare coloan. 8onver*ia e*te declanat 0n %od auto%at de ctre *i*te%6 atunci c:nd *e !ace o co%and <3.0?> a*upra datelor tabelului6 caz 0n care nu *e %ai poate a%:na convertirea ace*tora ctre cea %ai recent ver*iune de !or%at. ac un tabel e*te i%po*ibil de convertit ctre cel %ai recent !or%at al tipului pe care 0l re!er6 atunci nu %ai *unt per%i*e co%enzi );. a*upra tabelului i datele lui devin inacce*ibile. Acea*ta pre*upune c6 p:n la validarea tabelului6 *unt per%i*e doar co%enzile ./O3 ?0*)> *au ?/<1C0?> ?0*)>. +tiliz:nd vizualizarea <S>/:?0*:CO)<;1S din dicionarul datelor *e poate deter%ina care dintre tabele conine date bazate pe un !or%at neactualizat. 8oloana .0?0:<3#/0.>. returneaz

),

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

valorile @>S *au 1O dup cu% datele au !o*t convertite *au nu. (entru coloanele unde nu *e pune proble%a unei conver*ii a datelor 2de e7e%plu6 cele *calare5 e*te returnat valoarea 1J0. E0e1pl27 a5 , *e %odi!ice tipul t:persoana prin adu)area unui nou atribut de tip *)O* care * *toc1eze !oto)ra!ia per*oanei. , *e actualizeze i tabelul dependent tab:persoane. i!erena dintre cele dou %etode e*te c pri%a realizeaz conver*ia la nivel de tabel6 iar cea de@a doua doar pentru coloana +oto.
A0TER TYPE t_pers"ana A// ATTR5B-TE (*"t" B0OB) CASCA/E ,OT 5,C0-/5,7 TAB0E /ATA%

;etoda 1Q
A0TER TAB0E ta#_pers"ane -P7RA/E 5,C0-/5,7 /ATA%

;etoda 2Q
-P/ATE ta#_pers"ane SET *"t" A *"t"%

b5 En ur%a %odi!icrii tipului t:persoana6 * *e veri!ice pentru tabelele dependente tab:persoane i tab:surse dac datele *unt actualizate la noul !or%at. ,e ob*erv c pentru coloanele tabelului tab:persoane conver*ia e*te !cut6 pentru coloana autor din tab:surse nu e*te !cut6 iar pentru coloana titlu nu e*te cazul.
SE0ECT TAB0E_,A.E, CO0-.,_,A.E, /ATA_-P7RA/E/ 1RO. -SER_TAB_CO0-.,S ?HERE -PPER (TAB0E_,A.E) 5, (6TAB_PERSOA,E6, 6TAB_S-RSE6)%

En cadrul unei co%enzi 0)?>/ ?0*)> pot !i *peci!icate clauze de *tocare pentru noile atribute de tip colecie *au )O*. Ace*tea *unt *i%ilare celor prezentate 0n *eciunea de*pre de!inirea tabelelor obiect.

Algorit( pentru (odi%icarea unui tip obiect


,intetiz:nd6 pentru a %odi!ica un tip obiect trebuie ur%ai ur%torii paiF 1= ,e e7ecut co%anda 0)?>/ ?@3> pentru %odi!icarea tipului. 2= ,e utilizeaz co%anda C/>0?> O/ />3)0C> ?@3> *O.@ pentru a *incroniza corpul tipului cu noua de!iniie a ace*tuia. 3= ,e actualizeaz datele din tabelele dependente 0n con!or%itate cu ulti%a ver*iune de tip6 utiliz:nd opiunile din co%anda 0)?>/ ?0*)> *au co%enzi );. a*upra datelor ce trebuie convertite. 4= ,e %odi!ic unitile de pro)ra% 3)4S2) dependente6 a*t!el 0nc:t ace*tea * ia 0n con*iderare *c1i%brile adu*e tipului. "= ,e utilizeaz opional Oracle ?=pe ?ranslator *au 53ublisher pentru a )enera noile !iiere header pentru aplicaii6 dac li%bajul e7tern !olo*it de aplicaii e*te C6 re*pectiv 5a6a. Ace*te utilitare pot auto%atiza operaia de actualizare a aplicaiei 0n ur%a *c1i%brilor a*upra tipurilor de la nivelul bazei de date.

4.2. $li(inarea tipurilor obiect

Orientare pe obiecte n Oracle9i

)0

(entru *upri%area unui tip de!init de utilizator e*te di*ponibil in*truciunea ./O3 ?@3>. +tilizatorul care iniiaz acea*t co%and trebuie * !ie proprietarul tipului *au * aib privile)iul *i*te% ./O3 01@ ?@3>. ,inta7a co%enzii e*teF DROP T'PE 3schema.4nume:tip 3 K+ORCE L ,ALIDATEM 4 ac nu *e precizeaz nu%ele *c1e%ei6 atunci *i*te%ul pre*upune c tipul ce va !i eli%inat *e a!l 0n propria *c1e%. Opiunile GO/C> *au &0)I.0?> *unt obli)atorii pentru eli%inarea tipurilor care au obiecte dependente. 8lauza GO/C> e*te *peci!icat dac *e dorete eli%inarea unui tip dei e7i*t obiecte ale bazei care *unt dependente de ace*ta. En ace*t caz6 *i*te%ul %arc1eaz invalide toate tipurile6 coloanele *au tabelele dependente de tipul eli%inat6 ace*tea devenind inacce*ibile p:n la revalidare. (rin ur%are6 opiunea GO/C> trebuie utilizat cu atenie. O co%anda ./O3 ?@3> nu poate !i anulat. Atunci c:nd e*te *peci!icat clauza GO/C>- *i*te%ul Oracle %ai 0nt:i di*ociaz toate obiectele a*ociate cu tipul re*pectiv i apoi eli%in tipul. e e7e%plu6 e*te cuno*cut c tipul rdcin al unei ierar1ii nu poate !i eli%inat dec:t dup ce *unt ter*e toate tabelele i *ubtipurile care 0l re!er. (rin ur%are6 dac *e *peci!ic GO/C>6 *i*te%ul invalideaz toate *ubtipurile a*ociate tipului *upri%at. ac *e precizeaz clauza &0)I.0?>6 *i*te%ul caut in*tanele *tocate 0n cadrul coloanelor *ub*tituibile av:nd tipul re*pectiv i *ubtipuri ale ace*tuia. ac nu e*te )*it nici o a*t!el de in*tan6 *i*te%ul duce la bun *!:rit co%anda propa):nd *c1i%barea ctre toate coloanele *ub*tituibile de tipul re*pectiv. in cauz c invalidarea unui tabel poate duce la pierderea datelor *tocate 0n ace*ta6 *e reco%and utilizarea opiunii &0)I.0?> la ter)erea oricrui tip. +n *ubtip e*te o ver*iune *pecializat a *upertipului *u direct i6 prin ur%are6 0ntre cele dou tipuri e7i*t o dependen e7plicit. (entru a evita ruperea le)turii dintre *ubtipuri i *upertipurile core*punztoare6 un *upertip nu poate !i eli%inat dec:t dac %ai 0nt:i *unt *upri%ate toate *ubtipurile *ale. E0e1pl27 , *e eli%ine tipul t:persoana !r a utiliza opiunea GO/C>. #ipul t:persoana e*te tipul rdcin al ierar1iei ce conine tipurile t:artist6 t:autor i t:"urnalist. e a*e%enea6 ace*t tip e*te utilizat 0n cadrul tabelului tab:persoane i tab:surse.
>> mai intai ta#e e e )epen)ente /ROP TAB0E ta#_surse% /ROP TAB0E ta#_pers"ane% >> tipuri e in(epan) )e a su#tipuri pana /ROP TYPE t_Burna ist% /ROP TYPE t_aut"r% /ROP TYPE t_artist% >>e iminarea tipu ui t_pers"ana /ROP TYPE t_pers"ana%

a tipu

ra)a(ina

4.3. 6ependene i tipuri inco(plete


#ipurile obiect pot !i 0n relaie6 0n *en*ul c *e !olo*e*c unul pe cellalt 0n cadrul de!iniiei lor.

,1

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

e e7e%plu6 poate !i nece*ar ca tipul t:artist * conin un atribut de tip colecie 2cu ele%ente de tip t:opera:de:arta5 care * indice operele de art create de !iecare arti*t6 iar tipul t:opera:de:arta * conin un atribut de tip t:artist care * indice arti*tul care a creat opera re*pectiv. #ipurile pot !i dependente 0n %od direct *au indirect6 prin inter%ediul tipurilor inter%ediare6 nu%ite %utual dependente. +n )ra! orientat de tipuri %utual dependente 0n care tipurile *unt noduri i dependenele *unt reprezentate prin arce6 conine 0ntotdeauna un circuit. (entru a de!ini a*t!el de dependene circulare6 trebuie * !ie utilizat tipul re!erin pe cel puin unul dintre *e)%entele circuitului. &7i*t dou %etode de abordare pentru crearea a dou tipuri dependente 2 t:a i t:b5 0n %od direct. (ri%a %etod pre*upune ur%torii paiF crearea tipului t:a ca tip inco%pletG crearea tipului t:b6 care re!er tipul e7i*tent tip:aG co%pletarea de!iniiei tipului t:a 2prin C/>0?> O/ />3)0C> ?@3>5. 8ea de@a doua %etod ia 0n con*iderare !aptul c6 atunci c:nd apar erori de co%pilare la de!inirea unui tip6 *i*te%ul creeaz auto%at tipul ca !iind inco%plet. (aii ace*tei %etode *unt ur%toriiF crearea tipului t:a 2*i*te%ul creeaz auto%at tipul t:a inco%plet5G crearea tipului t:b6 care re!er tipul e7i*tent tip:aG co%pilarea tipului t:a 2prin 0)?>/ ?@3>BCO;3I)>5. E0e1pl27 +tiliz:nd cele dou %etode prezentate anterior6 * *e de!inea*c tipuri ce %odeleaz entitile dependente artist i opera. #ipul t:opera:de:arta conine un atribut care !ace re!erin la un obiect de tip t:artist6 iar tipul t:artist are un atribut de tip colecie care conine pentru !iecare arti*t operele de art a*ociate. ;etoda 1F
CREATE TYPE t_artist% & CREATE TYPE t_"pera_)e_arta AS OBJECT ( (")_"pera ,-.BER, tip VARCHAR2(20), tit u VARCHAR2(200), artist RE1 t_artist, )ata_(rearii /ATE, )ata_a(3i4itiei /ATE, $a "are ,-.BER)% & CREATE TYPE t_"pere_ti AS TAB0E O1 t_"pera_)e_arta% & CREATE TYPE t_artist AS OBJECT ( nume VARCHAR2(30), prenume VARCHAR2(30), anu _nasterii VARCHAR2(!), anu _m"rtii VARCHAR2(!), nati"na itate VARCHAR2(!0),

Orientare pe obiecte n Oracle9i "#ser$atii "pere VARCHAR2(2000), t_"pere_ti)%

,1

&

;etoda 2F
CREATE TYPE t_artist AS OBJECT ( nume VARCHAR2(30), prenume VARCHAR2(30), anu _nasterii VARCHAR2(!), anu _m"rtii VARCHAR2(!), nati"na itate VARCHAR2(!0), "#ser$atii VARCHAR2(2000), "pere t_"pere_ti)% & CREATE TYPE t_"pera_)e_arta AS OBJECT ( (")_"pera ,-.BER, tip VARCHAR2(20), tit u VARCHAR2(200), artist RE1 t_artist, )ata_(rearii /ATE, )ata_a(3i4itiei /ATE, $a "are ,-.BER)% & CREATE TYPE t_"pere_ti AS TAB0E O1 t_"pera_)e_arta% & A0TER TYPE t_artist CO.P50E%

Acea*te *ecvene de co%enzi creeaz un *et de tipuri %utual dependente. +tiliz:nd pri%a %etod6 *e ob*erv c tipul t:artist e*te de!init de dou ori. (ri%a co%and e*te o declaraie inco%plet6 nece*ar pentru de!inirea atributului de tip re!erin artist al tipului t:opera:de:arta. eclaraia e*te inco%plet pentru c *e o%ite *peci!icarea *tructurii i a co%porta%entului. Ace*tea *unt *peci!icate ulterior6 0n declaraia co%plet6 tipul t:artist devenind !uncional. eclaraia inco%plet a*i)ur co%pilarea cu *ucce* a tipului t:opera:de:arta. /r declararea tipului t:artist ca !iind tip inco%plet6 co%anda de creare a tipului t:opera:de:arta ar !i returnat erori de co%pilare. En %etoda a doua6 dei *i*te%ul realizeaz operaia de creare6 din cauza erorilor de co%pilare tipul t:artist e*te %arcat auto%at ca !iind tip obiect inco%plet. &7i*tena ace*tui tip deter%in co%pilarea !r erori a tipurilor t:opere:ti i t:artist. up crearea tipurilor co%plete ce 0l utilizeaz 2 t:opere:ti i6 indirect6 t:opera:de:arta56 tipul t:artist e*te reco%pilat !r erori i devine un tip co%plet. +n tip inco%plet poate !i de!init 0n ur%toarele dou *ituaiiF 0n %od e7plicit de ctre utilizator6 atunci c:nd co%anda de creare a tipului *tabilete doar un nu%e pentru tip6 o%i:nd de!inirea *tructurii i co%porta%entului ace*tuiaG 0n %od i%plicit de ctre *i*te%6 atunci c:nd la crearea unui tip apar erori de co%pilare i tipul e*te creat !r a i *e a*ocia o *tructur i un co%porta%ent valid. (entru a co%pleta un tip inco%plet6 *e e7ecut co%anda C/>0?> ?@3> 0n care *e *peci!ic atributele i %etodele tipului. 8o%pletarea unui tip inco%plet *e !ace dup ce au !o*t create toate tipurile care !ac re!erire la el. Acea*t operaie deter%in reco%pilarea lui i per%ite *i*te%ului * elibereze eventualele blocri. ac la crearea unui tip6 ace*ta re!er tipuri care nu e7i*t 2nici %car

,2

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

declarate inco%plet56 atunci tipul e*te creat6 dar cu erori de co%pilare 2e*te a!iat %e*ajul H AarningF ?=pe created Mith compilation errorsI5. #e1nica tipurilor inco%plete per%ite crearea de tipuri care conin atribute re!erin ctre un *ubtip plani!icat6 dar care nu a !o*t creat 0nc. (entru acea*ta6 %ai 0nt:i *e creeaz *ubtipul ca tip inco%plet6 ur%:nd * !ie co%pletat ulterior. Odat ce un tip obiect e*te declarat inco%plet6 el trebuie * !ie co%pletat ulterior ca tip obiect. Nu *e poate6 de e7e%plu6 * !ie declarat ulterior ca tip colecie. ,in)ura alternativ6 0n eventualitatea ace*tei nece*iti6 e*te eli%inarea tipului i recrearea lui. ac un tip a !o*t creat cu erori de co%pilare i *e 0ncearc e7ecutarea unei operaii a*upra lui6 cu% ar !i crearea de tabelele obiect *au in*tanierea unor obiecte de tipul re*pectiv6 e*te po*ibil * apar eroarea H/ecompile t=pe Rnume:tipS be+ore attempting this operation I. En ace*t caz tipul trebuie * !ie reco%pilat %anual6 prin inter%ediul unei co%enzi 0)?>/ ?@3>BCO;3I)>. +n tabel *au o coloan *ub*tituibil de tip obiect e*te dependent nu nu%ai de tipul *u6 ci i de *ubtipurile ace*tuia. (entru !iecare atribut adu)at 0ntr@un *ubtip al unui tip care e*te utilizat 0ntr@un tabel6 *e introduce c:te o coloan a*cun*. Ace*te coloane a*cun*e *unt adu)ate c1iar i atunci c:nd tabelul *au coloana *ub*tituibil nu conine date pentru acel *ubtip. e e7e%plu6 un tabel obiect *ub*tituibil de tip t:persoana e*te dependent nu nu%ai de ace*t tip6 dar i de *ubtipurile a*ociate6 t:autor6 t:"urnalist *au t:artist. E0e1pl27 ,e con*ider tipul t:autor i *ubtipul ace*tuia t:"urnalist. , *e creeze tabelul obiect *ub*tituibil tab:autori6 care * nu conin obiecte de tip t:"urnalist. , *e in*ereze o 0nre)i*trare de tip t:autor i apoi * *e eli%ine tipul t:"urnalist.
CREATE TAB0E ta#_aut"ri O1 t_aut"r% 5,SERT 5,TO ta#_aut"ri VA0-ES (t_aut"r(2,6/an .i3ai es(u6,20,6(riti(6,6 iterar6))% CO..5T% >>/ROP TYPE t_Burna ist >>returnea4a er"area ORA>02303 /ROP TYPE t_Burna ist VA05/ATE%

ac *e 0ncearc ter)erea unui *ubtip av:nd obiecte dependente6 atunci co%anda ./O3 ?@3> returneaz eroarea HO/08'23'3F cannot drop or replace a t=pe Mith t=pe or table dependents I i nu *e e7ecut. e e7e%plu6 0ncercarea de a ter)e tipul t:autor va )enera o eroare6 deoarece ace*t tip e*te dependent de tabelul tab:persoane i de tipul t:"urnalist. ac e7i*t tabele *au coloane dependente6 dar care nu conin date de tipul eli%inat6 *e poate !olo*i cuv:ntul c1eie &0)I.0?>6 care !ace ca *i*te%ul * veri!ice in*tanele e7i*tente ale tipului re*pectiv i * tear) tipul doar dac nu a )*it date dependente. En ace*t caz6 coloanele a*cun*e a*ociate cu atributele unice ale tipului ter* *unt6 la r:ndul lor6 eli%inate. +tilizarea opiunii &0)I.0?> e*te reco%andat %ereu6 at:t la %odi!icarea6 c:t i la ter)erea *ubtipurilor.

4.4. .rivilegii asupra tipurilor obiect i a (etodelor lor


(rivile)iile re!eritoare la tipurile obiect pot !i de!inite la nivel de *i*te% *au de obiect al

Orientare pe obiecte n Oracle9i

,3

*c1e%ei. (rivile)iile la nivel de *i*te% *unt ur%toareleF C/>0?> ?@3>6 care per%ite crearea de tipuri obiect 0n cadrul propriei *c1e%eG C/>0?> 01@ ?@3>6 0)?>/ 01@ ?@3> i ./O3 01@ ?@3>6 care per%it crearea6 %odi!icarea6 re*pectiv *upri%area tipurilor obiect din orice *c1e%G >D>C<?> 01@ ?@3>6 care per%ite utilizarea i re!erirea tipurilor obiect din orice *c1e%G <1.>/ 01@ ?@3>6 care per%ite crearea de *ubtipuri ale tipurilor obiect ne!inale din orice *c1e%G <1.>/ 01@ &I>A6 care per%ite crearea de *ubvizualizri ale vizualizrilor obiect din orice *c1e%. /ole@urile CO11>C? i />SO</C> includ privile)iul *i*te% C/>0?> ?@3>. /ole@ul .*0 include toate ace*te privile)ii. 9elativ la tipurile obiect6 *e pot utiliza dou privile)ii la nivel de obiect 2 >D>C<?> i <1.>/5. (rivile)iul >D>C<?> per%ite utilizarea tipului pentru de!inirea unui tabel obiect6 a unei coloane obiect 0ntr@un tabel relaional *au pentru declararea unei variabile *au para%etru de tipul re*pectiv6 0n cadrul propriei *c1e%e. e a*e%enea6 ace*t privile)iu per%ite invocarea %etodelor tipului. &7ecuia %etodelor i per%i*iunile a*ociate ace*tora *unt *i%ilare cu cele create pentru *ubpro)ra%ele 3)4S2) *tocate. (rivile)iul <1.>/ per%ite crearea de *ubtipuri *au *ubvizualizri ale tipurilor6 re*pectiv ale vizualizrilor6 a*upra crora trebuie * e7i*te privile)ii *peciale deja acordate. Ace*t privile)iu poate !i acordat a*upra unei *ubvizualizri *au *ubtip doar dac utilizatorul *au role8ul cruia i *e acord are acelai privile)iu i a*upra *upertipului *au *upervizualizrii6 iar ace*ta a !o*t pri%it 0n %od direct6 cu opiunea AI?E #/01? O3?IO1. Opiunea AI?E EI>/0/CE@ O3?IO16 utilizat la acordarea unui privile)iu obiect a*upra unui tip *au unei vizualizri6 per%ite acordarea auto%at a privile)iului re*pectiv a*upra tuturor *ubtipurilor6 re*pectiv *ubvizualizrilor core*punztoare. e e7e%plu6 0n conte7tul unei ierar1ii de vizualizri6 acea*t opiune e*te util atunci c:nd trebuie acordat privile)iului S>)>C? a*upra unei vizualizri i a*upra tuturor *ubvizualizrilor ace*teia. ,unt nece*are privile)ii *peciale pentruF a de!ini tipuri i tabele care utilizeaz tipuri ce aparin altor utilizatoriG a acorda privile)iul de utilizare a tipurilor *au tabelelor proprii ctre ali utilizatori ai bazei de date. (entru orice tip utilizat 0n de!iniia unui nou tip *au a unui tabel trebuie deinut privile)iul *i*te% >D>C<?> 01@ ?@3> *au privile)iul obiect >D>C<?>. ac *e intenioneaz * *e acorde altor utilizatori acce* ctre propriile tipuri *au tabele6 atunci e*te nece*ar !ie privile)iul >D>C<?> cu opiunea AI?E #/01? O3?IO16 !ie privile)iul *i*te% >D>C<?> 01@ ?@3> cu opiunea AI?E 0.;I1 O3?IO1 . #oate ace*te privile)ii trebuie * !i !o*t pri%ite 0n %od direct6 i nu prin inter%ediul role@urilor. E0e1pl27 ,e con*ider c utilizatorul student deine obiectele create pe parcur*ul ace*tui capitol. , *e creeze doi utilizatori 2student1- student25 care dein role8 urile CO11>C? i />SO</C>.

,4

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

CREATE -SER stu)ent2 5/E,T515E/ BY par" a2% 7RA,T RESO-RCE TO stu)ent2% 7RA,T CO,,ECT TO stu)ent2% >>== (ei a a t uti i4at"r se (reea4a asemanat"r CO,,ECT stu)ent&"ra( eUinstantaB/%

+tilizatorul student acord ur%toarele privile)ii obiect utilizatorului student1 a*upra tipurilor t:adresa i t:autor6 de!inite anterior.
7RA,T EFEC-TE O, t_a)resa TO stu)ent2% 7RA,T EFEC-TE O, t_aut"r TO stu)ent2 ?5TH 7RA,T OPT5O,%

+tilizatorul student1 e7ecut ur%toarele co%enzi )...


CO,,ECT stu)ent2&par" a2UinstantaB/% CREATE TAB0E ta#_a)rese O1 stu)ent=t_a)resa% CREATE TYPE t_a)rese_ti AS TAB0E O1 stu)ent=t_a)resa% & CREATE TYPE t_ ansare_)e_(arte AS OBJECT ( )ata /ATE, tit u VARCHAR2(20), aut"r stu)ent=t_aut"r)% & CREATE TAB0E ta#_aut"ri O1 stu)ent=t_aut"r%

e a*e%enea6 student1 are po*ibilitatea de a acorda %ai departe altor utilizatori privile)ii a*upra obiectelor care !olo*e*c tipul t:autor6 deoarece are privile)iul >D>C<?> a*upra ace*tuia6 cu opiunea AI?E #/01? O3?IO1. En *c1i%b6 a*upra tipului t:adresa nu a !o*t acordat privile)iul cu aceeai opiune. e aceea6 a*upra obiectelor care 0l utilizeaz nu *e pot acorda privile)ii altor utilizatori En ace*t caz6 *i*te%ul returneaz eroarea H O/08'1$2'F grant option does not eCist +or PRnume:utili atorS.Rnume:tipSPI.
7RA,T SE0ECT 7RA,T EFEC-TE >> Returnea4a 7RA,T EFEC-TE 7RA,T SE0ECT O, ta#_aut"ri TO stu)ent2% O, t_ ansare_)e_(arte TO stu)ent2% er"area ORA>02920 O, t_a)rese_ti TO stu)ent2% O, ta#_a)rese TO stu)ent2%

+tilizatorul student2 poate e7ecuta cu *ucce* co%enzi care acce*eaz i !olo*e*c tipurile i tabelele din *c1e%a student1.
CREATE TYPE t_(arte AS OBJECT( nume VARCHAR2(20), )"meniu VARCHAR2(20), ansare stu)ent2=t_ ansare_)e_(arte)% & CREATE TAB0E ta#_(arti O1 t_(arte%

(entru acce*ul la tipuri obiect *e utilizeaz doar privile)iile >D>C<?> i <1.>/6 dar tabelele obiect !olo*e*c toate privile)iile de acce* di*ponibile pentru tabelele relaionale. (rivile)iile re!eritoare la un tabel obiect *untF S>)>C?6 care per%ite acce*ul la valorile atributelor pentru obiectele *tocate 0n liniile tabeluluiG <3.0?>6 care per%ite %odi!icarea atributelor obiectelor utilizate 0n cadrul tabeluluiG

Orientare pe obiecte n Oracle9i

,"

I1S>/?6 care per%ite adu)area de noi obiecte 0n tabelG .>)>?>6 care per%ite eli%inarea de obiecte din tabel.

(rivile)iile care coordoneaz acce*ul la coloanele obiect ale unui tabel *unt *i%ilare celor la nivel de tabel. Operaia de *electare a anu%itor coloane ale unui tabel obiect nu nece*it privile)ii a*upra tipurilor obiect utilizate 0n cadrul tabelului. En *c1i%b6 pentru *electarea unei 0ntre)i linii obiect trebuie privile)ii de acce* la *tructura tipului obiect re!erit 2 >D>C<?>5. Nu e*te per%i* de!inirea de privile)ii la nivel de coloan 2re*pectiv6 atribut5 a*upra tabelelor obiect. E0e1pl27 ,e con*ider tipul t:artist de!init anterior6 care conine un atribut de tip tablou i%bricat 2t:opere:ti56 i tabelul obiect tab:artisti a*ociat. .ntero)rile care ur%eaz *e e7ecut !olo*ind un *et di!erit de privile)iiF
CREATE TAB0E ta#_artisti O1 t_artist ,ESTE/ TAB0E "pere STORE AS ts_"pere% 5,SERT 5,TO ta#_artisti VA0-ES (6R")in6, 6Au'uste6, 62;!06, 62<296, 6*ran(e4a6, ,-00, ,-00)% SE0ECT VA0-E(a) 1RO. ta#_artisti a% SE0ECT numeCC6 6CCprenumeCC 6(6CCanu _nasteriiCC6>6CCanu _m"rtiiCC6)6 1RO. ta#_artisti%

(entru a%bele cereri6 *i*te%ul veri!ic e7i*tena privile)iului S>)>C? a*upra tabelului tab:artisti. En cadrul pri%ei cereri6 pentru a interpreta datele6 utilizatorul trebuie * obin in!or%aii de*pre *tructura tipului. e aceea6 atunci c:nd cererea acce*eaz tipul6 *i*te%ul veri!ic i privile)iul >D>C<?>. &7ecuia celei de@a doua cereri6 nu i%plic tipuri 0n %od e7plicit6 aa c privile)iile a*upra tipului t:artist nu *unt veri!icate. E0e1pl27 +tiliz:nd *c1e%a din *eciunea precedent6 student2 poate e7ecuta ur%toarele cereri.
SE0ECT 1RO. SE0ECT 1RO. aut=(")_aut"r stu)ent2=ta#_aut"ri aut% (= ansare=aut"r=nume ta#_(arti (%

En a%bele intero)ri utilizatorul !olo*ete tipuri a*upra crora nu are privile)ii e7plicite6 dar co%enzile *e e7ecut cu *ucce* pentru c proprietarii tipului 2 student5 i tabelului 2student15 dein privile)iile nece*are6 iar ace*tea au !o*t acordate cu opiunea AI?E #/01? O3?IO1. ,i*te%ul Oracle !ace veri!icri *upli%entare i returneaz o eroare dac utilizatorul care e7ecut cererea nu deine privile)iile nece*are6 la e7ecutarea ur%toarelor operaiiF 0ncrcarea unui obiect 0n %e%oria virtual obiect ca ur%are a acce*rii unei valori de tip re!erin 2*e veri!ic privile)iul S>)>C? a*upra tabelului obiect ce conine obiectul re!erit i privile)iul >D>C<?> a*upra tipului obiect re*pectiv5G %odi!icarea *au in*tanierea unui obiect 0ncrcat 0n %e%oria virtual 2*e veri!ic privile)iul <3.0?>6 iar6 0n cazul in*tanierii6 privile)iul I1S>/? a*upra tabelului obiect de*tinaie5G ter)erea unui obiect 2*e veri!ic privile)iul .>)>?> a*upra tabelului obiect *au relaional de*tinaie5G

,'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

invocarea unei %etode 2*e veri!ic privile)iul >D>C<?> a*upra tipurilor obiect ce conin %etoda5.

4.". >tilitare
;er*iunea Oracle9i per%ite utilizarea %ecani*%elor obiectuale 0n cadrul utilitarelor de i%portJe7port i pentru 0ncrcarea rapid a datelor prin S2)9)oader. +tilitarele de i%portJe7port per%it introducerea i e7tra)erea datelor 0n6 re*pectiv din bazele de date Oracle. e a*e%enea6 ace*tea *unt utile pentru crearea copiilor de *i)uran 2 bacLup5 i %i)rarea 0ntre di!eritele ver*iuni ale ser6er@ului de baze de date Oracle. Au !o*t adu*e 0%buntiri a*t!el 0nc:t * !ie acceptate datele de tip obiect. 8o%ponenta de e7port *crie de!iniiile tipurilor obiect i toate datele a*ociate 0ntr@un !iier depozit cu e7ten*ia .dmp6 iar co%ponenta de i%port poate crea %odelul de date i in!or%aiile e7portate6 utiliz:nd ace*t !iier. En cazul tipurilor6 *e e7port i co%enzile de de!inire ale *ubtipurilor6 iar la i%port6 un *ubtip poate !i creat 0naintea i%portului de!iniiei *upertipului *u. En ace*t caz6 *ubtipul va !i creat cu erori de co%pilare. Ace*tea trebuie i)norate6 tipul !iind revalidat dup crearea *upertipului *u. e a*e%enea6 de!iniiile vizualizrilor obiect ce aparin unei ierar1ii de vizualizri pot !i i ele e7portate. +tilitarul S2)9)oader e7tra)e date din !iiere e7terne pentru a le in*era 0n tabelele unei baze de date Oracle. /iierele pot conine at:t date de tip *calar 2CE0/- I1?>#>/6 .0?>6 1<;*>/56 c:t i date co%ple7e de tipuri de!inite de utilizator. ,e pot 0ncrca linii *au coloane obiect 2inclu*iv obiecte care au atribute de tip obiect6 colecie *au re!erin56 colecii i obiecte de tip )O*. En ver*iunea Oracle9i6 prin S2)9)oader pot !i 0ncrcate doar coleciile pe un *in)ur nivel6 nu i cele pe %ai %ulte niveluri. S2)9)oader !olo*ete !iiere de control 2 9.ctl56 care conin co%enzi *peciale de de!inire a datelor- pentru a de*crie !or%atul i locaia !iierelor de date6 tabelul 0n care *e introduc datele 0ncrcate i ali para%etri ai proce*ului. &7i*t dou abordri pentru 0ncrcarea datelorF 0ncrcarea convenional6 care utilizeaz co%enzi I1S>/? i un vector ta%pon de le)tur pentru a tran*porta date 0n tabelele bazei de dateG 0ncrcarea direct6 care utilizeaz .irect 3ath )oad 03I pentru a *crie blocurile de date direct 0n baza de date6 pentru client@ul S2)9)oader. Encrcarea direct nu !olo*ete o inter!a S2) i evit cuantu%ul de proce*are *upli%entar6 a*ociat co%enzilor S2). e aceea6 0ncrcarea direct tinde * a*i)ure per!or%ane %ai bune dec:t cea convenional. Oricare dintre cele dou abordri *e poate utiliza pentru a 0ncrca date de tip obiect *au colecie.

4.'. -ipuri generice i tran!itorii


,i*te%ul Oracle a*i)ur trei tipuri de date S2) )enerice care per%it 0ncap*ularea dina%ic i acce*ul la de*crieri de tipuri6 in*tane de date i *eturi de in*tane de date ale altor tipuri S2)6 inclu*iv tipuri obiect *au colecie. Ace*te tipuri *peciale pot !i utilizate pentru i%ple%entarea de tipuri anoni%e. #ipurile )enerice aparin *c1e%ei S@S. 8ele trei tipuri )enerice S2) *unt i%ple%entate ca tipuri opace6 adic *tructura lor intern nu e*te cuno*cut bazei de date. atele de ace*te tipuri pot !i intero)ate doar dac *e i%ple%enteaz !uncii *peciale 2de obicei rutine )#35. En ace*t *cop6 *i*te%ul Oracle !urnizeaz !uncii OCI i 3)4S2).

Orientare pe obiecte n Oracle9i

,)

#ipurile )enerice *unt ur%toareleF 01@?@3>6 care conine o de*criere a unui tip S2)G 01@.0?06 care e*te un tip autode*criptiv pentru in*tanele tipurilor de date6 conin:nd at:t date6 c:t i o de*criere a !iecrui tip utilizatG 01@.0?0S>?6 care e*te un tip autode*criptiv pentru *eturi de in*tane i care include o de*criere a tipului 0%preun cu un *et de in*tane ale tipului re*pectiv. #ipurile 01@.0?0 i 01@.0?0S>? pot !i *tocate per*i*tent 0n cadrul bazei de date. 01@?@3>6 dei *e re!er la un tip *tocat per*i*tent 0n baza de date6 e*te tranzitoriu6 valoarea lui ne!iind *tocat auto%at 0n baza de date. /iecare dintre ace*te trei tipuri poate !i utilizat at:t cu tipurile prede!inite6 native ale bazei de date6 c:t i cu tipurile obiect *au colecie 2cu *au !r nu%e5. &le a*i)ur un %od )eneric de a lucra dina%ic cu de*crierile6 in*tanele i *eturile de in*tane ale diver*elor tipuri. +tiliz:nd !unciile 03I6 *e poate crea o de*criere 01@?@3> a oricrui tip. e a*e%enea6 *e poate converti 2C0S?5 o valoare de orice tip S2) ctre 01@.0?0 i reciproc. ,i%ilar *e lucreaz cu tipul 01@.0?0S>?. #ipurile )enerice *i%pli!ic lucrul cu procedurile *tocate. &le *e pot utiliza pentru a 0ncap*ula de*crieri i date de tipuri *tandard *au pentru a tran*%ite in!or%aia 0ncap*ulat 0n para%etri de tip )eneric. En corpul procedurii *e detaliaz %odalitatea de abordare a datelor 0ncap*ulate i a de*crierilor de tipuri. e a*e%enea6 0ntr@o coloan de tip 01@.0?0 *au 01@.0?0S>? *e pot *toca date 0ncap*ulate6 de o varietate de tipuri. e e7e%plu6 *e poate utiliza 01@.0?0 0%preun cu te1nolo)ia Oracle 0d6anced 2ueuing pentru a %odela cozile de tipuri de date etero)ene. (entru !iecare tip S2) )eneric e7i*t un tip OCI core*punztor care 0l i%ple%enteaz i care e*te prevzut cu un *et de !uncii pentru crearea i acce*area in!or%aiilor de tipul re*pectiv. #ipurile OCI *unt ur%toareleF OCI?=pe6 core*punztor lui S@S.01@?@3>G OCI0n=.ata6 core*punztor lui S@S.01@.0?0G OCI0n=.ataSet6 core*punztor lui S@S.01@.0?0S>?. &7i*t unele li%baje care utilizeaz tipuri de date ce pot !i %odi!icate dina%ic la %o%entul rulrii pro)ra%ului *au per%it pro)ra%ului * veri!ice tipul variabilei. e e7e%plu6 li%bajul C are cuv:ntul c1eie union i pointer@ul 6oid 96 5a6a are operatorul t=peo+ i cla*e 0n!urtoare 2 Mrapper5 pentru tipurile *calare. ;er*iunea Oracle9i per%ite crearea variabilelor i a coloanelor ce conin date de orice tip. e a*e%enea6 e*te po*ibil deter%inarea reprezentrii !izice a unor valori de tip )eneric. +tiliz:nd ace*te caracteri*tici6 o coloan a unui tabel poate conine o valoare nu%eric 0ntr@o linie6 un ir de caractere *au un obiect 0n alta. (ac1etul prede!init .*;S:?@3>S conine con*tante ce caracterizeaz tipurile prede!inite i cele de!inite de utilizator6 nece*are pentru lucrul cu 01@?@3>6 01@.0?0 i 01@.0?0S>?. Ace*te con*tante au tipul 3)S:I1?>#>/ i *unt !olo*ite pentru a indica tipul 2prede!init *au de!init de utilizator5 unei valori de tip 01@?@3>. 8on*tantele *unt de !or%a ?@3>CO.>:numetip6 unde numetip e*te tipul identi!icat i poate !i 1<;*>/6 &0/CE0/26 *)O*6 />G6 O*5>C?6 &0//0@6 ?0*)> etc. #ipul 01@.0?0 per%ite reprezentarea valorilor de orice tip *calar *au obiect. Ace*t tip )eneric e*te un tip obiect ce are ataate %etode *peci!ice care pri%e*c o valoare *calar i o converte*c la un *calar *au obiect. ,i%ilar6 tipul prede!init 01@.0?0S>? *e poate utiliza pentru a reprezenta valori de orice tip colecie. (entru a prelucra i veri!ica in!or%aii de*pre un tip6 *e poate utiliza tipul prede!init 01@?@3> 0n co%binaie cu pac1etul .*;S:?@3>S. (rincipalele %etode ale tipului )eneric 01@.0?0 *unt ur%toareleF

,,

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

!unciile %etode *tatice de !or%a CO1&>/?numetip6 care au un para%etru de intrare de tip numetip i returneaz in*tana de tip S@S.01@.0?0 a*ociat valorii para%etruluiG %etodele de tip #>?numetip6 care au un para%etru de ieire de tip numetip prin inter%ediul cruia returneaz valoarea in*tanei de tip S@S.01@.0?0 0n !or%atul adecvat 2numetip poate !i un tip *calar *au de!init de utilizator5G !uncia %etod #>??@3>6 care are un para%etru de ieire de tip S@S.01@.0?0 prin inter%ediul cruia *e pot a!la caracteri*ticile unui tip 2precizia6 *cala unui nu%r6 lun)i%ea unui ir de caractere etc.5 i care returneaz o valoare 0ntrea) core*punztoare tipului in*tanei S@S.01@.0?0 relativ la care *e apeleaz 2identi!icatorul returnat e*te con*i*tent con*tantelor din cadrul pac1etului .*;S:?@3>S5G %etoda #>??@3>10;>6 care nu are para%etri i care6 aplicat unei in*tane ce *toc1eaz o valoare obiectual6 returneaz nu%ele tipului obiect al valorii *tocate.

E0e1pl27 ,e con*ider tipul t:persoana creat anterior6 ce conine atributele cod i nume. ,e de!inete un tabel tab:generic cu dou coloane6 cod de tip nu%eric i data de tip S@S.01@.0?0. , *e con*truia*c o procedur care parcur)e tabelul i a!ieaz *u)e*tiv datele *tocate 0n coloana de tip S@S.01@.0?06 interpret:nd tipul de baz i proce*:nd valoarea core*punztor cu ace*t tip.
CREATE TAB0E ta#_'eneri( ( (") ,-.BER, )ata SYS=A,Y/ATA)% 5,SERT 5,TO ta#_'eneri( VA0-ES (2, SYS=A,Y/ATA=CO,VERTnum#er(20))% 5,SERT 5,TO ta#_'eneri( VA0-ES (2, SYS=A,Y/ATA=CO,VERT"#Be(t(t_pers"ana(<<,6/a i6)))% 5,SERT 5,TO ta#_'eneri( VA0-ES (3, SYS=A,Y/ATA=CO,VERT$ar(3ar2(6arta6))% CO..5T% CREATE OR REP0ACE PROCE/-RE pr"(_'eneri(a 5S C-RSOR (_'eneri( 5S SE0ECT ("), )ata 1RO. ta#_'eneri(% $_(") ta#_'eneri(=(")KTYPE% $_)ata ta#_'eneri(=)ataKTYPE% $_tip SYS=A,YTYPE% $_(")tip P0S_5,TE7ER% $_numetip VARCHAR2(:0)% $_)umm8 P0S_5,TE7ER% $_numar ,-.BER% $_$ar(3ar2 VARCHAR2(200)% $_pers"ana t_pers"ana% an8t8pe_nenu _pt_s(a ar EFCEPT5O,% numetip_ne(un"s(ut EFCEPT5O,% BE75, 1OR $_re( 5, (_'eneri( 0OOP $_(") IA $_re(=(")% $_)ata IA $_re(=)ata% &H (")u tipu ui este un numar (are i)enti*i(a HH tipu $a "rii ui $_)ata= H& $_(")tip IA $_)ata=7etT8pe ($_tip)%

Orientare pe obiecte n Oracle9i &H $_(")tip este ("mparat (u ("nstante e )in pa(3etu HH /B.S_TYPES pentru a )etermina tipu )e )ate si HH a )e(i)e m")a itatea )e a*isare H& CASE $_(")tip >>)a(a este numeri(== ?HE, /B.S_TYPES=TYPECO/E_num#er THE, 51 $_tip 5S ,OT ,-00 THE, >> tipu s(a ar tre#uie sa returne4e $_tip nu RA5SE an8t8pe_nenu _pt_s(a ar% E,/ 51% $_)umm8 IA $_)ata=7ETnum#er ($_numar)% /B.S_O-TP-T=P-T_05,E (TO_CHAR($_(")) CC 6I ,-.BER A 6 CC TO_CHAR($_numar))% >>)a(a este sir )e (ara(tere== ?HE, /B.S_TYPES=TYPECO/E_$ar(3ar2 THE, 51 $_tip 5S ,OT ,-00 THE, >> tipu s(a ar tre#uie sa returne4e $_tip nu RA5SE an8t8pe_nenu _pt_s(a ar% E,/ 51% $_)umm8 IA $_)ata=7ET$ar(3ar2 ($_$ar(3ar2)% /B.S_O-TP-T=P-T_05,E (TO_CHAR($_(")) CC 6I VARCHAR2 A 6 CC $_$ar(3ar2)% >>)a(a este )e tip "#ie(t== ?HE, /B.S_TYPES=TYPECO/E_"#Be(t THE, $_numetip IA $_)ata=7etT8pe,ame()% >>nume e unui tip "#ie(t este (a i*i(at (u nume e >>s(3emei )in (are *a(e parte 51 -PPER($_numetip) VA 6ST-/E,T=T_PERSOA,A6 THE, >>este a t tipR RA5SE numetip_ne(un"s(ut% E,/ 51% $_)umm8 IA $_)ata=7ET"#Be(t ($_pers"ana)% /B.S_O-TP-T=P-T_05,E (TO_CHAR ($_(")) CC 6I tip "#ie(t A 6 CC $_numetip CC 6 (6 CC $_pers"ana=(") CC 6, 6 CC $_pers"ana=nume CC 6)6 )% E,/ CASE% E,/ 0OOP% EFCEPT5O, ?HE, an8t8pe_nenu _pt_s(a ar THE, RA5SE_App i(ati"n_Err"r (>20002, 6Para)"EI instanta )e tip An8T8pe returnata )e 7etT8pe 6 CC6 tre#uie sa *ie ,-00 pentru t"ate tipuri e s(a are6)% ?HE, numetip_ne(un"s(ut THE, RA5SE_App i(ati"n_Err"r (>20002, 6Tip ne(un"s(ut 6 CC $_numetipCC6Wpr"'ram $a i) pentru stu)ent=t_pers"ana6)% E,/ pr"(_'eneri(a% & SM0@ SE0ECT t=)ata='ett8pename() 1RO. ta#_'eneri( t% T=/ATA=7ETTYPE,A.E() >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SYS=,-.BER ST-/E,T=T_PERSOA,A

,0

01
SYS=VARCHAR2

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

SM0@ EFEC pr"(_'eneri(a% 2I ,-.BER A 20 2I tip "#ie(t A ST-/E,T=T_PERSOA,A (<<, /a i) 3I VARCHAR2 A arta

4.). Stocarea obiectelor


,i*te%ul Oracle )e*tioneaz *tructura co%ple7 a tipurilor obiect 0n %od *i%ilar cu *tructura *i%pl6 relaional a tabelelor. +n tip obiect poate !i reprezentat ca o *tructur arbore*cent 0n care nodurile reprezint atribute. Atributele de tip obiect au6 la r:ndul lor6 noduri HcopilI pentru propriile atribute. /iecare ra%ur *e ter%in cu un atribut de tip *calar 2 &0/CE0/26 1<;*>/6 />G5 *au de tip colecie. Atributele de pe nivelurile ter%inale ale tipului obiect ori)inal pot !i *tocate 0ntr@o coloan a unui tabel. Atributele din cadrul unei ierar1ii arbore*cente care *e a!l pe nivelurile !inale i nu *unt de tip colecie *e nu%e*c atribute *calare !inale ale tipului obiect. Entr@un tabel obiect6 *i*te%ul *toc1eaz in!or%aia din !iecare atribut *calar !inal *au re!erin 0n c:te o coloan *eparat. e a*e%enea6 !iecare vector e*te *tocat 0ntr@o coloan6 dac nu depete li%ita de 4--- octei. Atributele !inale de tip tablou i%bricat *unt *tocate 0n tabele *eparate6 a*ociate cu tabelul obiect care le conine. Ace*te tabele trebuie * !ie declarate la de!inirea tabelului obiect 2clauza 1>S?>. ?0*)> din co%anda C/>0?> ?0*)>5. Atunci c:nd *e con*ult *au *e %odi!ic atributele obiectelor dintr@un tabel obiect6 *i*te%ul e7ecut auto%at operaiile a*upra coloanelor core*punztoare ale tabelului. =a acce*area unei in*tane obiect6 *i*te%ul aduce o copie a ace*tuia 0n %e%oria client. Ace*t lucru e*te realizat prin invocarea con*tructorului i%plicit al tipului re*pectiv6 0n care *e utilizeaz coloanele tabelului obiect ca ar)u%ente. ac un tabel are o coloan de tip obiect6 atunci pentru !iecare dintre atributele !inale ale tipului e*te adau)at c:te o coloan a*cun* tabelului. e a*e%enea6 !iecare coloan obiect are a*ociat o coloan a*cun* care *toc1eaz in!or%aia null pentru acea*ta6 adic valorile null ato%ice ale obiectelor de pe pri%ul nivel i ale celor i%bricate. O coloan *au un tabel obiect *ub*tituibil are a*ociate coloane a*cun*e nu nu%ai pentru !iecare atribut al tipului obiect declarat6 dar i pentru !iecare atribut de!init 0n cadrul *ubtipurilor ace*tuia. Ace*te coloane *toc1eaz valorile atributelor re!eritoare la in*tanele *ubtipurilor in*erate. e e7e%plu6 o coloan *ub*tituibil t:persoana va avea a*ociat c:te o coloan a*cun* pentru !iecare atribut al tipului t:persoana 2cod i nume5 i pentru !iecare atribut din *ubtipuri 2cod:artist6 nationalitate6 an:nastere i an:moarte ale *ubtipului t:artistG cod:autor6 ocupatie i descriere pentru t:autorG +unctie i loc:munca ale *ubtipului t:"urnalist5. Atunci c:nd e*te creat un *ubtip6 coloanele a*cun*e a*ociate atributelor de!inite de *ubtipuri *unt adu)ate auto%at 0n toate tabelele ce conin coloane *ub*tituibile de tipul HprinteI al noului *ubtip. Acea*t operaie per%ite *tocarea valorilor corep*unztoare atributelor din *ubtipul creat. ac6 din di!erite %otive6 coloanele nu pot !i adu)ate6 crearea *ubtipului eueaz.

Orientare pe obiecte n Oracle9i

01

ac pentru eli%inarea unui *ubtip *e utilizeaz opiunea &0)I.0?> a co%enzii ./O3 ?@3>6 toate coloanele a*cun*e a*ociate atributelor unice ale *ubtipului *unt eli%inate auto%at6 dac nu conin date. En conte7tul *ub*tituibil !urnizat de o ierar1ie de tipuri6 cel %ai *peci!ic tip al unei in*tane obiect e*te tipul cel %ai deprtat de rdcin cruia 0i aparine in*tana re*pectiv. e e7e%plu6 un obiect de tip t:"urnalist poate !i con*iderat de tip t:autor *au t:persoana6 dar cel %ai *peci!ic tip e*te t:"urnalist. /iecare coloan *ub*tituibil are a*ociat 0n cadrul aceluiai tabel o coloan a*cun* *pecial care !urnizeaz in!or%aii re!eritoare la cel %ai *peci!ic tip al !iecrui obiect *tocat 0n cadrul tabelului. Acea*ta *e nu%ete coloan di*cri%inant6 iar valorile ei *e nu%e*c identi!icatori de tip 2 t=peid5 i identi!ic cel %ai *peci!ic tip al obiectului *tocat 0n linia re*pectiv. +n identi!icator de tip ocup un octet6 dar poate ajun)e p:n la 4 octei dac ierar1ia are %ulte ele%ente. .denti!icatorul de tip al unei in*tane obiect poate !i obinut utiliz:nd !uncia S@S:?@3>I.. E0e1pl27 ,e con*ider tabelul obiect *ub*tituibil tab:persoane cu ele%ente de tip t:persoana. , *e *electeze identi!icatorii de tip core*punztori obiectelor *tocate 0n tabel.
CREATE 5,SERT VA0-ES 5,SERT VA0-ES 5,SERT VA0-ES TAB0E ta#_pers"ane O1 t_pers"ana% 5,TO ta#_pers"ane (t_pers"ana (2+, 67e"r'es(u6))% 5,TO ta#_pers"ane (t_aut"r (2+, 65r$in' St"ne6, 22+, 6s(riit"r6, ,-00))% 5,TO ta#_pers"ane (t_Burna ist (3+, 6Sim"na P"pes(u6, 23+, 6Burna ist6, ,-00, 6re)a(t"r6, 6/i ema6))% SE0ECT nume, SYS_TYPE5/(VA0-E(p)) D5)enti*i(at"r )e tipD 1RO. ta#_pers"ane p% ,-.E 5)enti*i(at"r )e tip >>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> 7e"r'es(u 02 5r$in' St"ne 03 Sim"na P"pes(u 0!

;izualizarea <S>/:?@3>S din dicionarul datelor are o coloan denu%it ?@3>I. care conine valoarea identi!icatorului pentru !iecare tip. E0e1pl27 , *e *electeze nu%ele per*oanelor i nu%ele celui %ai *peci!ic tip al in*tanei core*punztoare *tocate 0n tabelul tab:persoane.
SE0ECT 1RO. ?HERE A,/ p=nume, ut=TYPE_,A.E ta#_pers"ane p, -SER_TYPES ut SYS_TYPE5/(VA0-E(p)) A ut=TYPE5/ TYPE_,A.E 5, (6T_PERSOA,A6, 6T_ART5ST6, 6T_A-TOR6, 6T_J-R,A05ST6)%

/iecare linie obiect dintr@un tabel obiect trebuie * aib un identi!icator lo)ic a*ociat 2 OI.56 care * !ie unic. .denti!icatorii obiect pot !i )enerai de *i*te% *au bazai pe o c1eie pri%ar e7i*tent. Acetia *unt utilizai pentru a con*trui re!erine la acel obiect. .denti!icatorii obiect bazai pe c1eie pri%ar per%it 0ncrcarea %ai uoar i %ai rapid a datelor *tocate 0ntr@un tabel obiect. En *c1i%b6 identi!icatorii obiect )enerai de *i*te% au avantajul c

02

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

nu trebuie * !ie )e*tionai de utilizator !olo*ind c1ei de!inite de ace*ta6 unicitatea lor !iind a*i)urat de *i*te%. (rin ur%are6 %ecani*%ul de re!ereniere al obiectelor e*te %ai *i)ur. Atunci c:nd *e con*truiete o re!erin ctre o linie obiect6 acea*ta e*te !or%at din identi!icatorul obiect6 unele %etadate de*pre tabelul obiect care conine linia re*pectiv i6 opional6 identi!icatorul de linie 2/OAI.5. (entru o coloan de tip re!erin cu do%eniu6 *paiul de *tocare a*ociat ace*teia e*te %ai %ic6 ne!iind nece*are %etadatele tabelului obiect. =iniile obiect de tip tablou i%bricat *unt %eninute 0ntr@un tabel de *tocare *eparat. /iecare tablou i%bricat are un *in)ur tabel de *tocare a*ociat tuturor liniilor i nu c:te unul pentru !iecare 0nre)i*trare. Ace*ta conine valorile tuturor ele%entelor coloanei re*pective. (entru a !ace a*ocierea dintre ele%entele tabloului i%bricat i 0nre)i*trrile HprinteI core*punztoare6 tabelul de *tocare are o coloan a*cun* 1>S?>.:?0*)>:I. care conine un identi!icator )enerat de *i*te%.

4.,. Indeci
#ipurile obiect pot interveni 0n %ecani*%ul de inde7are !urnizat de *i*te%ul Oracle. En continuare *unt prezentate c:teva %odaliti de i%ple%entare.

Indeci ba!ai pe (etode


+n inde7 bazat pe !uncii e*te un inde7 0n c1eia cruia intervin valorile returnate de o e7pre*ie *au o !uncie. Noutatea pe care o aduce ver*iunea Oracle9i e*te c !uncia de la baza unui a*t!el de inde7 poate !i o %etod a unui tip obiect. +n inde7 bazat pe o %etod deter%in calculul valorii returnate de %etoda re*pectiv6 pentru !iecare in*tan obiect din coloana *au tabelul inde7at. Ace*te valori *unt *tocate 0n cadrul inde7ului i pot !i utilizate !r a reevalua !uncia. .ndecii bazai pe !uncii *unt utili pentru %rirea per!or%anelor cererilor care conin o !uncie 0n clauza AE>/>. E0e1pl27 ,e con*ider tipul obiect t:opera:de:arta cu *tructura de!init anterior. Ace*ta conine o %etod 6olum care returneaz volu%ul nece*ar e7punerii unei opere de arta. ;olu%ul *e calculeaz pe baza di%en*iunilor obiectului re*pectiv6 2*tocate 0n cadrul vectorului dim de tip t:dim:65. , *e de!inea*c un tabel obiect de tip t:opera:de:arta i o cerere care * retureze operele ce ocup %ai puin de 2 %3. , *e inde7eze tabelul opere dup valorile returnate de %etoda 6olum.
/ROP TYPE t_"pera_)e_arta% /ROP TYPE t_)im_$% CREATE OR REP0ACE TYPE t_)im_$ AS VARRAY(3) O1 ,-.BER% & CREATE OR REP0ACE TYPE t_"pera_)e_arta AS OBJECT ( (")_"pera ,-.BER, tip VARCHAR2(20), tit u VARCHAR2(200), )ata_(rearii /ATE,

Orientare pe obiecte n Oracle9i )ata_a(3i4itiei /ATE, $a "are ,-.BER, )im t_)im_$, .E.BER 1-,CT5O, $" um RET-R, ,-.BER /ETER.5,5ST5C)% & CREATE OR REP0ACE TYPE BO/Y t_"pera_)e_arta 5S .E.BER 1-,CT5O, $" um RET-R, ,-.BER 5S $_re4u tat ,-.BER% BE75, 51 )imensiuni 5S ,OT ,-00 THE, $_re4u tat IA )im(2) H )im(2) H )im(3)% E0SE $_re4u tat IA 0% E,/ 51% RET-R, $_re4u tat% E,/ $" um% E,/% & CREATE TAB0E "pere O1 t_"pera_)e_arta% SE0ECT "=H 1RO. "pere " ?HERE "=$" um() L 2% CREATE 5,/EF $" um_"pere_i)E O, "pere " ("=$" um())%

03

(entru a e7ecuta cererea anterioar6 *i*te%ul trebuie * evalueze !uncia 6olum pentru !iecare linie obiect din tabel. ac e7i*t un inde7 bazat pe !uncie care returneaz valorile !unciei 6olum6 atunci calculul e*te realizat la crearea inde7ului6 iar la e7ecuia ace*tei intero)ri *i*te%ul con*ult doar rezultatele din inde7. En ace*t !el6 cererea e*te e7ecutat %ai rapid. .nde7area valorilor returnate de o !uncie are *en* doar dac ace*tea *unt con*tante 0n raport cu para%etri6 adic dac !uncia returneaz 0ntotdeauna aceeai valoare pentru aceeai in*tan obiect. in ace*t %otiv6 pentru a !olo*i o !uncie de!init de utilizator 0n cadrul unui inde76 acea*ta trebuie * !ie declarat ca !iind deter%ini*t6 utiliz:nd cuv:ntul c1eie .>?>/;I1IS?IC. A*t!el6 *e a*i)ur !aptul c e7i*t o dependen deter%ini*t 0ntre valoarea returnat de !uncie i valorile ar)u%entelor core*punztoare unui *et de in*tane obiect.

Inde+area atributelor
e!inirea indecilor a*upra unui tabel obiect *au tabel de *tocare 2a*ociat unui atribut *au coloan de tip tablou i%bricat5 e*te *i%ilar cu cea a indecilor core*punztori tabelelor obinuite. ,e pot de!ini indeci a*upraF atributelor *calare ale coloanelor obiectG atributelor *au coloanelor re!erin cu do%eniu. E0e1pl27 , *e de!inea*c un tabel relaional6 av:nd nu%ele tab:galerii. #abelul conine coloanele cod:galerie6 nume:galerie6 nume:cladire i adresa. 8oloana adresa e*te obiectual i are tipul t:adresa. (entru obinerea unei per!or%ane *porite 0n intero)rile care i%plic atributul cod:postal6 * *e creeze un inde7 core*punztor a*upra tabelului tab:galerii.
CREATE TAB0E ta#_'a erii (

04

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

(")_'a erie ,-.BER, nume_'a erie VARCHAR2(+0) ,OT ,-00, nume_( a)ire VARCHAR2(30), a)resa t_a)resa)% CREATE 5,/EF i_a)resa_'a 2 O, ta#_'a erii(a)resa=(")_p"sta )%

ac e*te nece*ar6 *i*te%ul per%ite de!inirea de indeci a*upra atributelor de tip tablou i%bricat. E0e1pl27 ,e con*ider tabelul tab:opere ce conine obiecte de tip t:opera:de:arta. #ipul t:opera:de:arta are un atribut 2polite5 care *toc1eaz poliele de a*i)urare a*ociate unei opere *ub !or%a unui tablou i%bricat 2t:polite:ti5. Ace*t tablou conine obiecte de tip t:polita:asigurare. , *e de!inea*c un inde7 unic a*upra codului polielor de a*i)urare. ,e pre*upune c nu%ele tabelului de *tocare a*ociat atributului polite e*te ts:polite.
CREATE -,5M-E 5,/EF (")_p" ita_uni(_i)E O, ts_p" ite (,ESTE/_TAB0E_5/, (")_p" ite)%

En conte7tul unei ierar1ii de tipuri obiect6 e*te po*ibil de!inirea de indeci a*upra atributelor tuturor tipurilor ce pot !i *tocate 0ntr@o coloan *ub*tituibil. Ace*te atribute pot !i re!erite 0n co%anda C/>0?> I1.>D6 utiliz:nd !uncia ?/>0? pentru a !iltra doar anu%ite tipuri. E0e1pl2 7 , *e creeze un inde7 a*upra atributului cod:autor al autorilor de *ur*e biblio)ra!ice 0nre)i*trai 0n tabelul tab:surse.
CREATE 5,/EF (")_aut"r_i)E O, ta#_surse (TREAT(aut"r AS t_aut"r)=(")_aut"r)%

#ipul declarat al coloanei autor e*te t:persoana6 care 0l are ca *ubtip pe t:autor6 i de aceea6 coloana poate conine in*tane obiect ale ace*tui tip i ale *ubtipurilor lui. Atributul cod:autor e*te de!init de tipul t:autor6 *upertipul t:persoana neav:nd ace*t atribut. (rin ur%are6 coloana a*cun* core*punztoare atributului cod:autor are valori di!erite de null doar pentru autorii de tip t:autor *au pentru eventualele *ubtipuri ale ace*tuia. ;alorile coloanei a*cun*e cod:autor *unt identice cu valorile e7pre*iei ?/>0?. At:t coloana a*cun*6 c:t i e7pre*ia ?/>0? au ca valoare codul autorului6 pentru liniile ce conin obiecte de tip t:autor6 i null6 pentru celelalte tipuri de autori. ,i*te%ul e7ploateaz ace*t lucru i creeaz inde7ul cod:autor:idC de tip *@arbore a*upra coloanei a*cun*e. e re%arcat c valorile din coloana a*cun* *unt identice cu valorile e7pre*iei ?/>0?6 doar dac tipul re!erit 0n cadrul opiunii 0S 20n e7e%plu6 t:autor5 e*te tipul care de!inete atributul inde7at. ac tipul int e*te un *ubtip care doar %otenete atributul6 e7pre*ia ?/>0? va returna valori di!erite de null doar pentru *ubtip 2t:"urnalist56 nu i pentru *upertipurile ace*tuia 2t:autor5.
CREATE 5,/EF (")_aut"r_'resit_i)E O, ta#_surse (TREAT(aut"r AS t_Burna ist)=(")_aut"r)%

4.0. .artiionarea tabelelor care conin obiecte

Orientare pe obiecte n Oracle9i

0"

(artiionarea rezolv proble%a prelucrrii tabelelor i a indecilor de di%en*iuni con*iderabile6 o!erind po*ibilitatea de*co%punerii ace*tora 0n pri %ai %ici i %ai uor de )e*tionat6 nu%ite partiii. ;er*iunea Oracle9i e7tinde acea*t te1nic i pentru tabelele care conin obiecte6 re!erine6 vectori i tablouri i%bricate. #ablourile i%bricate *unt per%i*e 0n tabelele partiionate6 dar tabelul de *tocare a*ociat nu poate !i partiionat. E0e1pl27 , *e partiioneze tabelul tab:opere dup do%eniu6 utiliz:nd di%en*iunea *lii 2 supra+ata56 care e*te un atribut al coloanei sala de tip t:sala. ,e con*ider c tipul t:opera:de:arta conine o coloan de tip vector t:polite:66 pentru a ilu*tra *tocarea vectorilor partiionai. e a*e%enea6 *e pre*upune c !iecare in*tan conine o valoare de tip *)O* pentru a *toca !oto)ra!ia operei de art re*pective.
CREATE OR REP0ACE TYPE t_p" ite_$ 5S VARRAY(200) O1 t_p" ita_asi'urare% & CREATE OR REP0ACE TYPE t_sa a AS OBJECT ( (")_sa a ,-.BER, 'a erie VARCHAR2(+0), nume VARCHAR2(200), supra*ata ,-.BER)% >> in mp A0TER TYPE t_"pera_)e_arta A// ATTR5B-TE (p" ite t_p" ite_$, sa a t_sa a, *"t" B0OB) CASCA/E% CREATE TAB0E ta#_"pere O1 t_"pera_)e_arta2 0OB (*"t") STORE AS (,OCACHE 0O775,7) PART5T5O, BY RA,7E (sa a=supra*ata) (PART5T5O, Opere_)in_sa i_mi(i VA0-ES 0ESS THA, (200) 0OB (*"t") STORE AS( STORA7E (5,5T5A0 20 .5,EFTE,TS 20 .AFEFTE,TS 200)) VARRAY p" ite STORE AS 0OB ( STORA7E (5,5T5A0 20 .5,EFTE,TS 20 .AFEFTE,TS 200)), PART5T5O, Opere_)in_sa i_me)ii VA0-ES 0ESS THA, (300) 0OB (*"t") STORE AS ( STORA7E (5,5T5A0 20 .5,EFTE,TS 20 .AFEFTE,TS 200)) VARRAY p" ite STORE AS 0OB ( STORA7E (5,5T5A0 20 .5,EFTE,TS 20 .AFEFTE,TS 200)), PART5T5O, Opere_)in_sa i_mari VA0-ES 0ESS THA, (+00) 0OB (*"t") STORE AS ( STORA7E (5,5T5A0 20 .5,EFTE,TS 20 .AFEFTE,TS 200)) VARRAY p" ite STORE AS 0OB ( STORA7E (5,5T5A0 20 .5,EFTE,TS 20 .AFEFTE,TS 200)))%

4.11. 3uncii i predicate utile


En lucrul cu obiectele i re!erinele ctre obiecte apar !recvent !unciile &0)<>6 />G6

0'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

.>/>G6 ?/>0?6 S@S:?@3>I. i predicatul IS OG tip. En blocurile 3)4S2)6 !unciile &0)<>6 />G i .>/>G pot aprea doar 0n co%enzi S2).

,AL(E
Entr@o co%and S2)6 !uncia &0)<> accept ca ar)u%ent un alias al unui tabel *au vizualizare obiect i returneaz in*tanele obiect *tocate 0n ace*ta. Acea*t !uncie poate returna in*tane de tipul liniei *au de oricare dintre *ubtipurile *ale6 dac e*te activat opiunea de *ub*tituibilitate. /uncia &0)<> e*te util 0n cadrul co%enzilor );. pentru a returna linii obiect 0n vederea %odi!icrii coleciilor. &7e%plele prezentate !olo*e*c ierar1ia de tipuri de!init anterior6 !or%at din tipul t:persoana cu *ubtipurile t:artist6 t:autor i t:"urnalist. ,e con*ider c tabelul obiect tab:persoane de tip t:persoana e*te *ub*tituibil pentru toate nivelurile ierar1iei 2 S<*S?I?<?0*)> 0? 0)) )>&>)S5. E0e1pl27 a5 , *e *electeze 0n !or% obiectual6 re*pectiv relaional6 toate per*oanele al cror nu%e e*te <eor)e*cu.
SE0ECT 1RO. ?HERE SE0ECT 1RO. ?HERE VA0-E(p) ta#_pers"ane p p=nume A 67e"r'es(u6% H ta#_pers"ane p nume A 67e"r'es(u6%

,e ob*erv c abordarea obiectual per%ite e7tra)erea %ai %ultor in!or%aii6 i anu%e valorile tuturor atributelor celui %ai *peci!ic tip al in*tanei. Abordarea relaional e7tra)e nu%ai valorile atributelor pentru tipul *peci!icat al tabelului 2 cod i nume ale tipului rdcin t:persoana5. b5 , *e *electeze per*oanele 2 cod i nume56 inclu*iv artitii i autorii6 dintr@o vizualizare obiect 6i :persoane a*upra tabelului obiect tab:persoane.
CREATE V5E? $i4_pers"ane O1 t_pers"ana AS SE0ECT H 1RO. ta#_pers"ane% SE0ECT VA0-E(p) 1RO. $i4_pers"ane p%

RE+
/uncia />G are ca ar)u%ent un alias al unui tabel *au al unei vizualizri obiect i returneaz o re!erin ctre in*tanele obiect din ace*ta. />G poate returna re!erine at:t ctre obiecte de tipul declarat al tabelului6 c:t i ctre obiecte core*punztoare *ubtipurilor ace*tuia6 *tocate 0n cadrul tabelului. E0e1pl27 , *e li*teze re!erine ctre toate per*oanele6 inclu*iv ctre autori i artiti.
SE0ECT RE1(p) 1RO. ta#_pers"ane p%

Orientare pe obiecte n Oracle9i

0)

DERE+
Entr@o co%and S2)6 !uncia .>/>G per%ite obinerea in*tanei obiect core*punztoare unei re!erine 2dere!ereniere5. .n*tana obiect returnat poate !i de tipul declarat al re!erinei *au de unul dintre *ubtipurile ace*tuia. E0e1pl27 , *e *electeze liniile obiect coninute 0n tabelul obiect tab:persoane6 in:nd cont de *ub*tituibilitatea ace*tuia. ;or !i a!iate 0nre)i*trrile *tocate at:t relativ la per*oane obinuite6 c:t i la artiti *au autori.
SE0ECT /ERE1(RE1(p)) 1RO. ta#_pers"ane p%

TREAT
/uncia ?/>0? %odi!ic tipul unei e7pre*ii la un alt tip *peci!icat. En )eneral6 ace*ta e*te un *ubtip al tipului e7pre*iei. 8u alte cuvinte6 !uncia 0ncearc * trateze o in*tan a unui *upertip ca o in*tan a unui *ubtip al ace*tuia. ac ace*t lucru nu e*te po*ibil6 e*te returnat valoarea null. /uncia ?/>0? e*te per%i* 0n S2)6 dar nu i 0n 3)4S2). (rincipalele utilizri ale lui ?/>0? *untF 0n li%itarea atribuirilor6 pentru a %odi!ica tipul unei e7pre*ii6 a*t!el 0nc:t * poat !i atribuit unei variabile de un tip %ai *pecializat 0n ierar1ie 2alt!el *pu*6 pentru a *eta valoarea unui *upertip la un *ubtip5G pentru acce*area atributelor i %etodelor unui *ubtip al tipului declarat liniei *au coloanei obiect. e e7e%plu6 un obiect de tip t:persoana poate !i tratat ca !iind de tip t:autor6 doar dac obiectul re*pectiv e*te 0ntr@adevr de tip t:autor 2*au un *ubtip al ace*tuia6 t:"urnalist5. ac per*oana e*te autor6 atunci obiectul e*te returnat cu tipul t:autor av:nd toate atributele i %etodele core*puntoare ace*tui tip. ac per*oana nu e*te autor6 !uncia ?/>0? returneaz valoarea null. /uncia ?/>0? poate !i utilizat at:t relativ la para%etri de tip obiect6 c:t i relativ la para%etri de tip re!erin. E0e1pl27 a5 ,e con*ider tabelul de!init anterior6 tabel6 av:nd atributele perscol de tip t:persoana6 autcol de tip t:autor i artcol de tip t:artist. , *e realizeze o atribuire prin li%itare 0ntre coloanele autcol i perscol. (entru !iecare linie6 ?/>0? returneaz o e7pre*ie de tip t:autor6 dac 0n linia re*pectiv e*te *tocat o valoare de ace*t tip6 *au valoarea null6 0n caz contrar.
-P/ATE ta#e set aut(" A TREAT(pers(" AS t_aut"r)%

b5 , *e *electeze toate in*tanele de tip t:autor ale tabelului obiect tab:persoane de tip t:persoana. 8o%anda utilizeaz ?/>0? pentru a %odi!ica tipul !iecrei linii obiect din t:persoana 0n t:autor.
SE0ECT TREAT(VA0-E(p) AS t_aut"r) 1RO. ta#_pers"ane p%

c5 , *e *electeze re!erine ctre toate in*tanele t:autor din tabelul obiect tab:persoane.

0,

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

SE0ECT TREAT(RE1(p) AS RE1 t_aut"r) 1RO. ta#_pers"ane p%

+na dintre cele %ai !recvente utilizri a !unciei ?/>0? e*te aceea de a acce*a atributele i %etodele unui *ubtip al tipului unei linii *au coloane obiect. E0e1pl27 , *e li*teze nu%ele i ocupaia per*oanelor din tabelul tab:persoane. , va a!ia ocupaia6 pentru per*oanele care *unt caracterizate prin ace*t atribut i6 0n re*t6 valoarea null. Atributul ocupatie !ace parte din tipul t:autor
SE0ECT nume, TREAT(VA0-E(p) AS t_aut"r)="(upatie "(upatie 1RO. ta#_pers"ane p% ,-.E >>>> 7e"r'es(u 5r$in' St"ne Sim"na P"pes(u OC-PAT5E >>>>>>>> nu s(riit"r Burna ist

+r%toarea cerere va declana o eroare 2H O/08''9'4F in6alid identi+ierI5 deoarece ocupatie e*te un atribut al tipului t:autor i nu al tipului t:persoana.
SE0ECT nume, VA0-E(p)="(upatie "(upatie 1RO. ta#_pers"ane p%

+n tabel *au o coloan obiect de tip ? care *unt *ub*tituibile6 au a*ociat c:te o coloan a*cun* core*punztoare !iecrui atribut al *ubtipurilor lui ?. Ace*te coloane nu *unt li*tate de o co%and .>SC/I*>6 dar ele conin date re!eritoare la atributele *ubtipurilor. /uncia ?/>0? per%ite acce*ul la ace*te coloane. E0e1pl27 ,e pre*upune c tipul t:autor conine o %etod ocupatie ce returneaz valoarea ace*tui atribut pentru o in*tan obiect dat. , *e de*crie *tructura tabelului tab:persoane i * *e a!ieze nu%ele i ocupaia !iecrei per*oane. &7e%plul arat %odul de utilizare al !unciei ?/>0? pentru a acce*a o %etod.
/ESC ta#_pers"ane SE0ECT nume, TREAT(VA0-E(p) AS t_aut"r)="(upatie() "(upatie 1RO. ta#_pers"ane2 p%

IS O+
(redicatul IS OG veri!ic in*tanele obiect 0n raport cu nivelul de *pecializare al tipului lor. IS OG e*te per%i* 0n S2)6 dar nu i 0n 3)4S2). E0e1pl27 , *e *electeze doar in*tanele obiect de tip t:autor 2inclu*iv in*tanele core*punztoare *ubtipurilor ace*tuia5 *tocate 0n tabelul tab:persoane.
SE0ECT VA0-E(p) 1RO. ta#_pers"ane p ?HERE VA0-E(p) 5S O1 (t_aut"r)% VA0-E(P)(CO/, ,-.E)

Orientare pe obiecte n Oracle9i >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> T_A-TOR(2+, 65r$in' St"ne6, 22+, 6s(riit"r6, ,-00) T_J-R,A05ST(3+, 6Sim"na P"pes(u6, 23+, 6Burna ist6, ,-00, 6/i ema6)

00

6re)a(t"r6,

(entru orice obiect care nu e*te de *ubtipul *peci!icat *au de un *ubtip al ace*tuia6 predicatul IS OG returneaz G0)S>. ac trebuie e7clu*e *ubtipurile tipului *peci!icat6 *e poate utiliza cuv:ntul c1eie O1)@. Ace*ta per%ite *electarea e7clu*iv a obiectelor cu cel %ai *peci!ic tip dat. (entru a condiiona tipul obiectului adre*at de o re!erin6 *e utilizeaz predicatul IS OG 0n co%binaie cu !uncia .>/>G6 ce re)*ete obiectul re!erit. E0e1pl27 a5 , *e *electeze *ur*ele biblio)ra!ice ale cror autori *unt de tip t:autor. ,unt e7clu*e *ur*ele ale cror autori *unt de un *ubtip al tipului t:autor 2de e7e%plu6 t:"urnalist5.
SE0ECT s=tit u tit u, s=aut"r aut"r 1RO. ta#_surse s ?HERE s=aut"r 5S O1 (O,0Y t_aut"r)% T5T0A-TOR >>>>>>>>>>>>>>> >>>>>> A'"nie si eEta4 T_A-TOR(2+,65r$in' St"ne6, 22+, 6s(riit"r6, ,-00)

b5 , *e *electeze re!erine ctre obiectele de tip t:autor *au t:artist6 *tocate 0n tabelul tab:persoane.
SE0ECT RE1(p) 1RO. ta#_pers"ane p ?HERE VA0-E(p) 5S O1 (t_aut"r, t_artist)%

c5 , *e a!ieze nu%ai autorii pentru care t:autor e*te cel %ai *peci!ic tip. &7e%plul utilizeaz !uncia ?/>0? pentru a converti obiectele de tip t:autor de la tipul tabelului obiect tab:persoane 2t:persoana5 la t:autor. En ace*t !el6 *unt li*tate toate atributele tipului core*punztor in*tanei returnate.
SE0ECT TREAT(VA0-E(p) AS t_aut"r) A-TOR 1RO. ta#_pers"ane p ?HERE VA0-E(p) 5S O1 (O,0Y t_aut"r)% A-TOR(CO/, ,-.E, CO/_A-TOR, OC-PAT5E, /ESCR5ERE) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> T_A-TOR (2+, 65r$in' St"ne6, 22+, 6s(riit"r6, ,-00) SE0ECT p=H 1RO. ta#_pers"ane p ?HERE VA0-E(p) 5S O1 (O,0Y t_aut"r)% CO/ ,-.E >>> >>>>>>>>>>>>> 2+ 5r$in' St"ne

S'S*T'PEID
/uncia S@S:?@3>I. poate !i utilizat 0n cadrul cererilor S2) pentru a obine identi!icatorul celui %ai *peci!ic tip al in*tanei obiect precizate ca ar)u%ent. /uncia returneaz identi!icatorii de tip din coloana di*cri%inant a*ociat coloanelor *ub*tituibile dintr@un tabel. #uturor tipurilor ce aparin unei ierar1ii de tipuri li *e a*ociaz identi!icatori di!erii de null6

111
unici 0n cadrul ierar1iei. returneaz valoarea null.

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

ac in*tana dat ca ar)u%ent core*punde unui tip !inal6 atunci !uncia

E0e1pl27 a5 ,e con*ider tabelul obiect *ub*tituibil tab:persoane6 av:nd tipul t:persoana. #ipul t:persoana e*te tipul rdcin al ierar1iei. Ace*ta are pe t:autor i t:artist ca *ubtipuri6 iar pe t:"urnalist ca *ubtip al tipului t:autor. , *e a!ieze nu%ele !iecrei per*oane i identi!icatorul tipului in*tanei re*pective.
SE0ECT nume, SYS_TYPE5/(VA0-E(p)) (")_tip 1RO. ta#_pers"ane p% ,-.E >>>>>>>>>>>>>> 7e"r'es(u 5r$in' St"ne Sim"na P"pes(u CO/_T5P >>>>>> 02 03 0!

b5 , *e a!ieze titlul lucrrii6 nu%ele i identi!icatorii celor %ai *peci!ice tipuri6 pentru autorii de *ur*e biblio)ra!ice 0nre)i*trai 0n tabelul tab:surse. 8oloana autor de tip t:persoana e*te *ub*tituibil.
SE0ECT s=tit u, s=aut"r=nume, SYS_TYPE5/(aut"r) (")_tip 1RO. ta#_surse s% T5T0>>>>>>>>>>>>>>>>>>>>>>>>>> Cr"ni(a )e a4i A'"nie si eEta4 EEp"4itii A-TOR >>>>>>>>>>> 7e"r'es(u 5r$in' St"ne Sim"na P"pes(u CO/_T5P >>>>>> 02 03 0!

Orientare pe obiecte n Oracle9i

111

". *i!uali!ri obiect


Ace*t capitol prezint %odalitatea de creare a aplicaiilor orientate pe obiecte6 p*tr:nd *tructura relaional a bazei de date. atele din tabele relaionale pot !i *intetizate 0n vizualizri obiect i acce*ate 0n %anier obiectual. Acea*t %odalitate de re)*ire a obiectelor poate opti%iza tra!icul client4ser6er6 deoarece con*ultarea unui %ultitabel *e !ace cu %ai puine incur*iuni la ser6er. =a !el cu% o vizualizare poate !i a*e%nat cu un tabel virtual6 o vizualizare obiect poate !i a*e%nat cu un tabel obiect virtual. /iecare linie dintr@o vizualizare obiect e*te un obiect care per%ite apelarea %etodelor6 acce*ul la atribute i crearea de re!erine. (rincipalele avantaje ale vizualizrilor obiect *unt !le7ibilitatea i per!or%anele *porite. ;izualizrile obiect *unt utile pentru crearea de prototipuri *au pentru tranzitarea *i%pl i rapid a aplicaiilor *pre %odelul obiectual6 !r a *c1i%ba *tructura !izic a tabelelor e7i*tente 0n baza de date. e a*e%enea6 vizualizrile obiect pot !i utilizate ca i cele relaionale pentru a prezenta datele nece*are utilizatorilor 0ntr@o !or% *pecial *au pentru a re*triciona acce*ul la unele dintre in!or%aiile *tocate 0n tabele. e e7e%plu6 *e poate crea o vizualizare obiect a*upra tabelului ce conine in!or%aii de*pre operele de art6 re*tricion:nd acce*ul la valoarea ace*tora6 care e*te *ecret. ,intetiz:nd obiectele din date relaionale6 *e pot *electa in!or%aii care !olo*e*c noi !or%ate. (ornind de la aceleai date *e pot crea %ai %ulte %odele cu )rade di!erite de co%ple7itate. En cadrul unei vizualizri obiect *e poate continua dezvoltarea %odelului. ac *unt nece*are %odi!icri a*upra unui tip obiect a*ociat unei vizualizri6 vizualizrile invalidate de acea*t operaie pot !i cu uurin actualizate 0n con!or%itate cu noua de!iniie. (e l:n) !le7ibilitate6 vizualizrile obiect aduc i un plu* de per!or%an. atele relaionale6 care *unt tran*!or%ate 0n linii obiect ale unei vizualizri6 traver*eaz reeaua ca un 0ntre)6 %icor:nd tra!icul 0n reea i ti%pul de proce*are. eoarece obiectele din vizualizare *unt proce*ate pe ser6er i nu pe %aina client6 rezult %ai puine co%enzi S2). e a*e%enea6 datele obiectuale din vizualizrile obiect pot !i 0ncrcate 0nJdin %e%oria virtual client. En ace*t !el6 %ecani*%ele *peci!ice de *electare i 0ncrcare a obiectelor dependente reduc tra!icul 0n reea. atele relaionale pot !i 0ncrcate 0n %e%oria virtual obiect de pe %aina client i a*ociate unor *tructuri C4C77 *au cla*e 5a6a6 a*t!el 0nc:t * !ie prelucrate ca nite cla*e native 0n cadrul aplicaiilor )#3. e a*e%enea6 *unt !urnizate %odaliti co%ple7e de re)*ire a obiectelor pornind de la datele relaionale e7i*tente. (rin %ecani*%ul de re!ereniere a obiectelor *e pot *electa *i%plu i e!icient datele din %ai %ulte tabele6 ne!iind nece*are "oin@uri co%ple7e. +tilizarea obiectelor 0n vizualizri nu i%plic re*tricii *upli%entare a*upra %ecani*%elor de *tocare ale bazei de date *au li%itri le)ate de re*triciile te1nolo)iei relaionale. e e7e%plu6 *e pot *intetiza obiecte din tabele relaionale partiionate i *e pot utiliza cereri paralelizate.

112

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

".1. 6e%inirea vi!uali!rilor obiect


O vizualizare reprezint un tabel lo)ic bazat pe unul *au %ai %ulte tabele *au vizualizri. (entru de!inirea unei vizualizri *e utilizeaz co%anda C/>0?> &I>A. (ractic6 vizualizarea nu conine date6 ea per%ite doar acce*ul ctre ace*tea. #abelele *au vizualizrile pe care *e bazeaz vizualizarea *e nu%e*c tabele de baz. Av:nd la baz %ecani*%ul deja e7i*tent pentru crearea vizualizrilor relaionale6 *i*te%ul Oracle9i per%ite crearea de vizualizri obiect *au vizualizri relaionale ce conin obiecte. Nu e7i*t re*tricii a*upra tipurilor de date ale obiectelor coninute 0n ace*te vizualizri. ,unt per%i*e tipuri *calare6 de!inite de utilizator 2tipuri obiect6 re!erin i colecie5 *au )O*. O vizualizare obiect e*te o vizualizare 0n care !iecare linie e*te un obiect de un tip *peci!icat6 obiect ce poate !i identi!icat 0n %od unic 0n *i*te% prin inter%ediul unui identi!icator obiect. Av:nd o *c1e% relaional dat6 procedura prin care *e de!inete o vizualizare obiect pre*upune *ucce*iunea ur%toarelor etapeF *tabilirea i crearea unui tip obiect 0n care !iecare atribut * core*pund unei coloane din tabelele de bazG de*crierea unei cereri care *peci!ic %odalitatea de e7tra)ere a datelor din tabelele de baz 2coloanele returnate de cerere trebuie * core*pund ca ordine i tip cu atributele tipului obiect a*ociat5G *peci!icarea unei c1ei unice6 bazat pe atributele datelor din tabelele de baz6 care *ervete drept identi!icator obiect i per%ite crearea de re!erine ctre obiectele din vizualizarea re*pectiv 2de obicei6 *e utilizeaz c1eia pri%ar *au identi!icatorul )enerat de *i*te%5. ac e*te nece*ar %odi!icarea ulterioar a datelor prin inter%ediul vizualizrii obiect i atributele tipului obiect nu core*pund cu e7actitate coloanelor din tabelul a*ociat 2de e7e%plu6 dac *unt inclu*e coloane calculate56 %ai trebuie ur%at un pa*. ,e de!inete un declanator de tip I1S?>0. OG6 care va !i invocat auto%at de !iecare dat c:nd aplicaiile %odi!ic datele din vizualizarea obiect. up e7ecutarea ace*tor pai6 vizualizarea obiect poate !i !olo*it e7act ca un tabel obiect. (entru a crea o vizualizare 0n propria *c1e%6 trebuie deinut privile)iul *i*te% C/>0?> &I>A6 iar pentru a putea crea o vizualizare 0n *c1e%a unui alt utilizator6 e*te nece*ar privile)iul *i*te% C/>0?> 01@ &I>A. (entru crearea unei *ubvizualizri e*te nece*ar privile)iul *i*te% <1.>/ 01@ &I>A *au privile)iul obiect <1.>/ a*upra *upervizualizrii re*pective. (roprietarul *c1e%ei care conine vizualizarea trebuie * aib privile)iile nece*are pentru a *electa6 in*era6 %odi!ica *au ter)e linii din tabelele *au vizualizrile pe care *e bazeaz acea*ta. (rivile)iile trebuie * !ie acordate 0n %od direct i nu prin inter%ediul unui role. (entru a !olo*i %etoda con*tructor a unui tip obiect la crearea unei vizualizri obiect6 trebuie ca tipul obiect * aparin *c1e%ei curente *au ca utilizatorul * aib privile)iul *i*te% >D>C<?> 01@ ?@3>. 8o%anda C/>0?> &I>A are ur%toarea *inta7F CREATE 3OR REPLACE4 3 K+ORCE L NO+ORCEM 4 ,IE4 3schema.4nume:6i uali are 3 KO+ 3schema.4nume:tip K4IT) OB ECT IDENTI+IER KDE+A(LT L 2atribut 36 atributB4 5 M L (NDER 3schema.4nume:super6i uali areM 2 Katribut constr:atr 3constr:atrB4 L constr:tabel:sau:6i M

Orientare pe obiecte n Oracle9i

113

36 Katribut constr:atr 3constr:atrB4 L constr:tabel:sau:6i MB4 5 AS subcerere 34IT) KREAD ONL' L C)EC3 OPTION 3CONSTRAINT constr4 M 4G 8lauza O/ />3)0C> *e *peci!ic pentru a recrea vizualizarea6 dac acea*ta e7i*t deja6 *c1i%b:ndu@i de!iniia !r a o ter)e i a reacorda privile)iile obiect nece*are. =a rede!inirea unei vizualizri6 declanatorii de tip I1S?>0. OG ataai ace*teia *unt eli%inai. Opiunea GO/C> e*te precizat dac *e dorete crearea vizualizrii c1iar atunci c:nd tabelele de baz ale ace*teia i tipurile obiect re!erite nu e7i*t *au proprietarul *c1e%ei ce conine vizualizarea nu are privile)iile nece*are a*upra obiectelor re!erite. Ace*te condiii trebuie * !ie 0ndeplinite 0naintea oricrei operaii );. a*upra vizualizrii. En caz contrar6 vizualizarea r%:ne invalid. 8lauza 1OGO/C> i%pune crearea vizualizrii doar dac *unt 0ndeplinite toate condiiile de validitate 2e7i*tena tabelelor de baz i a tipului a*ociat6 privile)iile nece*are5. Acea*t opiune e*te i%plicit. Atunci c:nd *e creeaz o vizualizare obiect nu *e pot utiliza alias@uri. A*upra vizualizrilor obiect *e pot *tabili con*tr:n)eri la nivel de atribut *au la nivel de vizualizare. Ace*te con*tr:n)eri *unt pur declarative6 0n *en*ul c nu *unt veri!icate de ctre *i*te%. En )eneral6 operaiile a*upra vizualizrilor *unt *upu*e con*tr:n)erilor de inte)ritate de!inite a*upra tabelelor de baz. En cadrul vizualizrilor relaionale6 nu *unt per%i*e con*tr:n)eri la nivel de atribut pentru coloanele obiect. ac de!iniia vizualizrii conine o con*tr:n)ere care nu e*te 0ndeplinit la %o%entul crerii6 atunci co%anda C/>0?> &I>ABGO/C> nu *e e7ecut cu *ucce*. Orice con*tr:n)ere re!erit 0n cadrul co%enzii trebuie * !ie de!init 0n tabelele de baz. 8lauza OG e*te *peci!ic de!inirii vizualizrilor obiect. (rin inter%ediul ei *e precizeaz tipul obiect a*ociat 2nume:tip5. 8oloanele vizualizrii obiect core*pund atributelor de pe pri%ul nivel al tipului. /iecare linie conine c:te o in*tan obiect i !iecare in*tan are a*ociat un identi!icator obiect 2OI.5 *peci!icat 0n clauza AI?E O*5>C? I.>1?IGI>/. ac *e o%ite nu%ele *c1e%ei6 *i*te%ul creeaz vizualizarea obiect 0n *c1e%a curent. .denti!icatorii obiect per%it con*truirea de re!erine ctre liniile obiect ale vizualizrilor obiect. En ace*t !el6 obiectele din ace*te vizualizri pot !i re!erite i 0ncrcate 0n %e%oria virtual obiect. eoarece datele vizualizrilor nu *unt *tocate per*i*tent6 trebuie *peci!icat un *et de valori care va !i utilizat pentru a de!ini identi!icatorii obiect. ;alorile trebuie * !ie unice 0n do%eniul liniilor *electate 0n vizualizare6 deoarece duplicarea lor creeaz proble%e atunci c:nd *e utilizeaz re!erinele ctre obiecte. 8lauza AI?E O*5>C? I.>1?IGI>/ *e poate !olo*i doar pentru o vizualizare obiect de pe pri%ul nivel al unei ierar1ii 2vizualizare rdcin5. Acea*t opiune per%ite *peci!icarea atributului *au atributelor care vor !i utilizate pentru a identi!ica unic !iecare linie din vizualizarea obiect. En %ajoritatea cazurilor6 ace*te atribute core*pund coloanelor care co%pun c1eia pri%ar a tabelului de baz. 8o%binaia de atribute care candideaz pentru a deveni identiti!icator obiect trebuie * identi!ice 0n %od unic o linie 0n vizualizare. 9e*triciile le)ate de identi!icatorii obiect i%pun !aptul cF dac *e utilizeaz o re!erin 2prin dere!ereniere *au 0ncrcarea 0n %e%oria virtual a unei c1ei pri%are de tip />G5 care identi!ic %ai %ult de o in*tan 0n vizualizarea obiect6 atunci e*te returnat o eroareG

114

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

clauza AI?E O*5>C? I.>1?IGI>/ nu poate !i *peci!icat la crearea unei *ubvizualizri6 deoarece *ubvizualizrile %otene*c identi!icatorii obiect de la *upervizualizrile lor.

ac vizualizarea obiect e*te de!init a*upra unui tabel *au unei vizualizri obiect6 atunci e7i*t deja identi!icatori obiect a*ociai !iecrei linii i *e poate o%ite acea*t clauz *au *e poate *peci!ica opiunea .>G0<)?. En ace*t !el6 *i*te%ul utilizeaz identi!icatorul obiect al tabelului *au al vizualizrii obiect de baz 2)enerat de *i*te% *au bazat pe c1eia pri%ar5. ac linia obiect e*te *intetizat e7clu*iv din date relaionale6 atunci trebuie *peci!icat un *et de atribute pentru a !i !olo*it drept identi!icator obiect. 8lauza <1.>/ e*te !olo*it pentru a *peci!ica o *ubvizualizare a unei vizualizri obiect e7i*tente. (entru a a!la dac o vizualizare e*te *upervizualizarea unei *ubvizualizri6 *e poate con*ulta coloana S<3>/&I>A:10;> a vizualizrii <S>/:&I>AS din dicionarul datelor. 9e*triciile i%pu*e la crearea *ubvizualizrilor *untF o *ubvizualizare trebuie * aparin aceleiai *c1e%e din care !ace parte *upervizualizarea *aG tipul obiect pe baza cruia *e creeaz *ubvizualizarea trebuie * !ie *ubtipul direct al tipului a*ociat *upervizualizriiG *e poate crea o *in)ur *ubvizualizare de un anu%it tip6 0n e7ten*ia aceleiai *upervizualizri. =a crearea vizualizrii e*te nece*ar o *ubcerere care * identi!ice coloanele i liniile tabelelor de baz din care *unt e7tra*e datele. =i*ta S>)>C? poate conine cel %ult 1--- e7pre*ii. ac *e creeaz vizualizri care re!er tabele i vizualizri di*tante6 le)turile bazei de date *peci!icate trebuie * !ie create utiliz:nd clauza CO11>C? ?O a co%enzii C/>0?> .0?0*0S> )I1F6 iar obiectele din clauza G/O; a *ubcererii trebuie cali!icate cu nu%ele *c1e%ei din care !ac parte. 9e*triciile a*upra *ubcererii unei vizualizri obiect *unt a*e%ntoare celor precizate pentru vizualizrile obinuite. En plu*6 pentru vizualizrile obiect trebuie ca e7pre*iile din li*ta *ubcererii * core*pund ca nu%r6 ordine i tip de date cu atributele de pri%ul nivel ale tipului obiect. 8lauza de re*tricie a *ubcererii AI?E />0. O1)@ interzice e7ecuia operaiilor de %odi!icare a datelor prin inter%ediul vizualizrii. 8lauza AI?E CE>CF O3?IO1 )aranteaz !aptul c6 din in*errile i %odi!icrile a*upra vizualizrii6 vor rezulta doar linii care 0ndepline*c condiiile din *ubcerere. Opiunea AI?E CE>CF O3?IO1 nu poate !unciona dacF e7i*t o *ubcerere i%bricat 0n cadrul *ubcererii vizualizrii *au 0ntr@una dintre vizualizrile de bazG operaiile de in*erare6 ter)ere i %odi!icare *e !ac prin inter%ediul declanatorilor I1S?>0. OG. (rin inter%ediul opiunii CO1S?/0I1? *e poate da un nu%e con*tr:n)erii CE>CF O3?IO16 0n caz contrar acea*ta av:nd unul i%plicit6 )enerat de *i*te%6 de !or%a S@S:Cn. 8o%enzile 0)?>/ &I>A i ./O3 &I>A6 aplicate unor vizualizri obiect !uncioneaz *i%ilar celor re!eritoare la vizualizrile obinuite. 8o%anda 0)?>/ &I>A e*te utilizat pentru reco%pilarea unei vizualizri 2opiunea CO;3I)>5 *au pentru de!inirea6 %odi!icarea i *upri%area de con*tr:n)eri. 8o%anda ./O3 &I>A per%ite ter)erea unei vizualizri. E0e1pl27 , *e de!inea*c o vizualizare obiect a*upra picturilor din %uzeu6 !r a per%ite acce*ul la

Orientare pe obiecte n Oracle9i

11"

valoarea ace*tora. ;izualizarea obiect conine obiecte de tip t:opera:de:arta6 av:nd atributele cod:opera6 tip6 titlu6 data:crearii6 dimensiuni6 data:achi itiei i polite. (entru a obine valorile coloanei cod a tabelului relaional tab:opere6 *e va utiliza atributul cod:opera al tipului a*ociat vizualizrii obiect.
CREATE TAB0E ta#_"pere ( (") ,-.BER PR5.ARY GEY, tip VARCHAR2(20), tit u VARCHAR2(200), artist RE1 t_artist, )ata_(rearii /ATE, )ata_a(3i4itiei /ATE, $a "are ,-.BER, p" ite t_p" ite_ti, )imensiuni t_)im_$) ,ESTE/ TAB0E p" ite STORE AS tst"(_p" % CREATE TYPE t_"pera_)e_arta AS OBJECT ( (")_"pera ,-.BER, tip VARCHAR2(20), tit u VARCHAR2(200), artist RE1 t_artist, )ata_(rearii /ATE, )ata_a(3i4itiei /ATE, p" ite t_p" ite_ti, )imensiuni t_)im_$)% & CREATE V5E? $i4_pi(turi O1 t_"pera_)e_arta ?5TH OBJECT 5/E,T515ER ((")_"pera) AS SE0ECT "=("), "=tip, "=tit u, "=artist, "=)ata_(rearii, "=)ata_a(3i4itiei, "=p" ite, "=)imensiuni 1RO. ta#_"pere " ?HERE 0O?ER (tip) A 6pi(tura6%

8lauza AI?E O*5>C? I.>1?IGI>/ 2cod:opera5 din co%anda C/>0?> &I>A *tabilete ca identi!icatorii obiect ai liniilor obiect din cadrul vizualizrii 6i :picturi * !ie bazai pe c1eia pri%ar cod a tabelului relaional de baz6 tab:opere. En cadrul vizualizrii6 coloana cod devine atributul cod:opera a*ociat tipului obiect. 8u% ace*t atribut e*te unic 0n do%eniul obiectelor vizualizrii i di!erit de null6 el poate !i !olo*it ca identi!icator obiect.

".2. >tili!area vi!uali!rilor obiect 4n aplicaii


ei datele *intetizate 0n cadrul unei vizualizri obiect pot proveni din %ai %ulte tabele6 obiectul traver*eaz reeaua printr@o *in)ur tran*%i*ie. .n*tana e*te adu* 0n %e%oria virtual client *ub !or%a unei *tructuri C4C77 *au variabil obiectual 3)4S2) i poate !i prelucrat ca orice alt *tructur nativ. O vizualizare obiect poate !i re!erit 0n cadrul co%enzilor S2) 0n acelai %od 0n care *unt re!erite tabelele obiect. e e7e%plu6 vizualizrile obiect pot aprea 0n clauza G/O; a co%enzii S>)>C?6 0n clauza S>? a co%enzii <3.0?> *au 0n condiia AE>/>. e a*e%enea6 e*te per%i* de!inirea de vizualizri obiect care * aib la baz alte vizualizri obiect. =a %odi!icarea *au

11'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

eli%inarea unui tip re!erit de o vizualizare obiect pe ser6er6 *i*te%ul %odi!ic auto%at i vizualizrile obiect a*ociate.

I(bricarea obiectelor 4n vi!uali!ri obiect


ac tipul obiect pe care *e bazeaz vizualizarea obiect are la r:ndul *u atribute de tip obiect6 atunci trebuie prevzute pentru ace*tea coloane obiect 0n *peci!icaia vizualizrii. ac 0n tabelul relaional deja e7i*t coloane de tipul atributului re*pectiv6 atunci ele *unt doar *electate pentru a !ace parte din vizualizare. En caz contrar6 in*tanele obiect *unt *intetizate din datele relaionale de baz6 0n aceeai %anier ca i in*tanele a*ociate tipului vizualizrii. Obiectele *unt create prin apelarea %etodei con*tructor a tipului obiect re*pectiv i valorile atributelor *unt obinute din coloanele relaionale *peci!icate 0n con*tructor. E0e1pl27 ,e con*ider tabelul relaional tab:galerii care conine in!or%aii de*pre )aleriile di*ponibile %uzeului. , *e creeze o vizualizare obiect 0n care adre*ele * reprezinte obiecte i%bricate 0n cadrul liniilor obiect de tip de tip t:galerie. Ace*t lucru aduce !le7ibilitate i per%ite reutilizarea tipului t:adresa 0n cadrul altor tipuri. , *e de!inea*c tipurile t:adresa6 t:galerie i vizualizarea 6i :galerii6 care va conine pentru !iecare )alerie codul6 nu%ele6 nu%ele cldirii i adre*a. Obiectele de tip t:adresa *unt con*truite din coloanele tabelului relaional core*punztor.
CREATE TAB0E ta#_'a erii( (")_'a ,-.BER PR5.ARY GEY, nume_'a VARCHAR2(+0), nume_( a)ire VARCHAR2(30), stra)a_'a VARCHAR2(20), "ras_'a VARCHAR2(20), Bu)et_'a CHAR(2), (")p"sta VARCHAR2(20))% CREATE OR REP0ACE TYPE t_a)resa AS OBJECT ( stra)a VARCHAR2(20), "ras VARCHAR2(20), Bu)et CHAR(2), (")p"sta VARCHAR2(20))% & CREATE TYPE t_'a erie AS OBJECT ( (") ,-.BER, nume_'a VARCHAR2(+0), nume_( a)ire VARCHAR2(30), a)resa_'a t_a)resa)% & CREATE V5E? $i4_'a erii O1 t_'a erie ?5TH OBJECT 5/E,T515ER ((")) AS SE0ECT '=(")_'a , '=nume_'a , '=nume_( a)ire, t_a)resa ('=stra)a_'a , '="ras_'a , '=Bu)et_'a , '=(")p"sta ) AS a)resa_'a 1RO. ta#_'a erii '%

8on*tructorul unui tip obiect nu returneaz niciodat valoarea null. (rin ur%are6 nici unul dintre obiectele adresa:gal din vizualizarea obiect de!init %ai *u* nu poate !i null6 c1iar atunci c:nd

Orientare pe obiecte n Oracle9i

11)

coloanele oras:gal- strada:gal- "udet:gal i codpostal din tabelul relaional *unt null. En !elul ace*ta6 *paiul e*te ocupat inutil cu in*tane care conin valoari null pentru !iecare atribut. #abelul relaional nu are coloane care * *peci!ice dac adre*a departa%entului e*te co%pletat *au nu. ac *e !ace convenia ca o anu%it coloan 2de e7e%plu6 strada:gal5 * indice c o 0ntrea) adre* e*te null6 atunci *e poate capta ace*t re)ul a aplicaiei !olo*ind !uncia .>CO.>.
CREATE V5E? $i4_'a erii O1 t_'a erie ?5TH OBJECT 5/E,T515ER ((")) AS SE0ECT '=(")_'a , '=nume_'a , '=nume_( a)ire, /ECO/E('=stra)a_'a , ,-00, ,-00, t_a)resa('=stra)a_'a , '="ras_'a , '=Bu)et_'a , '=(")p"sta )) AS a)resa_'a 1RO. ta#_'a erii '%

ei 0n ace*t !el *e i%ple%enteaz o re)ul a aplicaiei i%po*ibil de inclu* 0ntr @o *tructur relaional6 utilizarea ei 0n *ubcererea core*punztoare vizualizrii obiect are i un dezavantaj. Nu %ai e*te per%i* %odi!icarea direct a adre*ei departa%entului prin inter%ediul vizualizrii obiect. Ace*t lucru nu e*te )rav deoarece *e poate de!ini un declanator de tip I1S?>0. OG care * trateze propa)area %odi!icrilor !cute a*upra vizualizrii obiect ctre tabelul de baz.

>tili!area tipurilor colecie 4n vi!uali!ri obiect


8oleciile6 at:t tablourile i%bricate c:t i vectorii6 pot !i coloane 0n cadrul vizualizrilor. &le pot !i *intetizate direct din coloanele de baz de tip colecie *au utiliz:nd *ubcereri i operatorul C0S?B;<)?IS>?. E0e1pl27 a5 O )alerie conine %ai %ulte opere de art. , *e reprezinte !iecare oper de art 0n tabelul relaional tab:opere care conine coloanele cod6 titlu6 tip6 6aloare6 cod:artist i cod:gal. , *e i%pun o con*tr:n)ere de c1eie pri%ar a*upra coloanei cod i una de c1eie e7tern a*upra coloanei cod:gal6 ce re!er codul )aleriei din care !ace parte o anu%it oper de art.
CREATE TAB0E ta#_"pere( (") ,-.BER PR5.ARY GEY, tit u VARCHAR2(20), tip VARCHAR2(20), $a "are ,-.BER, (")_artist ,-.BER, (")_'a ,-.BER RE1ERE,CES ta#_'a erii((")_'a ))%

b5 , *e creeze tipul t:opera cu atribute core*punztoare tabelului tab:opere 2cod6 titlu6 tip6 6aloare6 cod:artist5. , *e de!inea*c un tip tablou i%bricat t:opere:ti care * conin ele%ente de tip t:opera. Ace*ta va !i nece*ar 0n %odelarea relaiei de cardinalitate man=8to8one dintre entitile opera i galerie.
CREATE TYPE (") tit u tip $a "are (")_artist t_"pera AS OBJECT ( ,-.BER, VARCHAR2(20), VARCHAR2(20), ,-.BER, ,-.BER)%

11,

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

& CREATE TYPE t_"pere_ti AS TAB0E O1 t_"pera% &

c5 , *e adau)e tipului t:galerie un nou atribut6 de tip t:opere:ti6 care * includ li*ta operelor e7pu*e in acea )alerie.
A0TER TYPE t_'a erie A// ATTR5B-TE( ista_"pere CASCA/E% t_"pere_ti)

d5 +tiliz:nd obiectele de!inite anterior6 * *e con*truia*c vizualizarea obiect 6i :galerii6 care conine coloane pentru codul6 nu%ele6 nu%ele cldirii6 adre*a )aleriei i colecia de opere de art a*ociat )aleriei re*pective. ;izualizarea obiect 6i :galerii e*te bazat pe tipul obiect t:galerie6 iar datele din acea*t vizualizare *unt *intetizate din tabelele relaionale tab:opere i tab:galerii. (entru *intetizarea datelor *e va !olo*i !uncia C0S?B;<)?IS>?.
CREATE OR REP0ACE V5E? $i4_'a erii O1 t_'a erie ?5TH OBJECT 5/E,T515ER ((")) AS SE0ECT '=(")_'a , '=nume_'a , '=nume_( a)ire, t_a)resa ('=stra)a_'a , '="ras_'a , '=Bu)et_'a ,'=(")p"sta ) AS a)resa_'a , CAST (.-0T5SET (SE0ECT "=("), "=tit u, "=tip, "=$a "are, "=(")_artist 1RO. ta#_"pere " ?HERE "=(")_'a A '=(")_'a ) AS t_"pere_ti) AS ista_"pere 1RO. ta#_'a erii '%

,ubcererea din cadrul blocului C0S?B;<)?IS>? *electeaz operele care aparin )aleriei curente. 8uv:ntul c1eie ;<)?IS>? indic !aptul c li*ta dintre paranteze trebuie tratat ca o valoare unitar. Operatorul C0S? tran*!or% o e7pre*ie con!or% !or%atului *peci!icat 0n clauza 0S. (entru e7e%plul con*iderat6 C0S? tran*!or% rezultatul 0ntr@un tablou i%bricat de tip t:opere:ti. O cerere a*upra vizualizrii 6i :galerii returneaz li*ta )aleriilor6 !iecare linie conin:nd codul6 nu%ele6 nu%ele cldirii6 adre*a i colecia de opere e7pu*e 0n cadrul )aleriei. 8oleciile pe %ai %ulte niveluri pot !i i ele utilizate 0n vizualizrile obiect. (entru acea*ta trebuie create niveluri adiionale 0n cadrul tipului obiect core*punztor vizualizrii. +r%torul e7e%plu creeaz o vizualizare obiect care conine o colecie pe %ai %ulte niveluri. ,e va i%ple%enta6 0n cadrul vizualizrii 6i :galerii6 !aptul c !iecare oper de art are a*ociat o %uli%e de polie de a*i)urare. ;izualizarea e*te bazat pe tabele relaionale *i%ple6 0n *en*ul c ace*tea nu conin colecii. En pri%ul r:nd6 trebuie create tipurile obiect i colecie care vor !i utilizate 0n cadrul vizualizrii. ,e de!inete c:te un tip obiect core*punztor ca *tructur !iecrui tabel relaional 2!iecrei coloane din tabel i *e a*ociaz un atribut de acelai tip 0n cadrul tipului obiect5. E0e1pl27 a5 , *e de!inea*c tabelul relaional tab:polite6 care conine in!or%aii de*pre poliele de a*i)urare core*punztoare operelor de art din %uzeu. , *e creeze tipul a*ociat tabelului 2 t:polita5 i tipul tablou i%bricat t:polite:ti6 cu ele%ente de tip t:polita. ,e va adu)a tipului t:opera un nou atribut6 lista:polite6 pentru *tocarea li*tei de polie a*ociate unei opere de art.
CREATE TAB0E ta#_p" ite( (")_p" ita ,-.BER,

Orientare pe obiecte n Oracle9i )es(riere VARCHAR2(200), *irma VARCHAR2(20), $a "are ,-.BER, (")_"pera ,-.BER RE1ERE,CES ta#_"pere ((")))% CREATE TYPE t_p" ita AS OBJECT ( (")_p" ita ,-.BER, )es(riere VARCHAR2(200), *irma VARCHAR2(20), $a "are ,-.BER)% & CREATE TYPE t_p" ite_ti AS TAB0E O1 t_p" ita% & A0TER TYPE t_"pera A// ATTR5B-TE( ista_p" ite t_p" ite_ti) CASCA/E%

110

b5 , *e de!inea*c vizualizarea obiect a*ociat tabelelor relaionale i tipurilor de!inite %ai *u*11.
CREATE OR REP0ACE V5E? $i4_'a erii O1 t_'a erie ?5TH OBJECT 5/E,T515ER ((")) AS SE0ECT '=(")_'a , '=nume_'a , '=nume_( a)ire, t_a)resa ('=stra)a_'a , '="ras_'a , '=Bu)et_'a ,'=(")p"sta ) AS a)resa_'a , CAST (.-0T5SET( SE0ECT "=("), "=tit u, "=tip, "=$a "are, "=(")_artist, CAST (.-0T5SET ( SE0ECT p=(")_p" ita, p=)es(riere, p=*irma, p=$a "are 1RO. ta#_p" ite p ?HERE p=(")_"pera A "=(")) AS t_p" ite_ti) 1RO. ta#_"pere " ?HERE "=(")_'a A '=(")_'a ) AS t_"pere_ti) 1RO. ta#_'a erii '%

#ipul care i%ple%enteaz entitatea opera are un atribut de tip tablou i%bricat 2 lista:polite5 i tipul t:galerie conine un tablou i%bricat de opere de art. (rin ur%are6 tabloul de opere e*te o colecie pe %ai %ulte niveluri. (entru a crea in*tanele ace*tui tip colecie *e utilizeaz tot operatorul C0S?B;<)?IS>? 0n cadrul co%enzii C/>0?> &I>A.

Crearea de re%erine la vi!uali!ri obiect


(entru a crea re!erine la obiectele coninute 0n vizualizri *au 0n tabele obiect *e utilizeaz operatorul ;0F>:/>G. Ace*ta utilizeaz c1eile e7terne e7i*tente 0n %odelul relaional. /uncia ;0F>:/>G pri%ete ca para%etri nu%ele vizualizrii *au tabelului obiect ctre care *e creeaz re!erina i o li*t de valori ale c1eilor e7terne. &a returneaz identi!icatorul obiectului re!erit. O re!erin creat relativ la un obiect dintr@o vizualizare obiect re*pect tipul identi!icatorului
11

(entru vizualizrile ce !olo*e*c i alte tipuri6 0n cazul 0n care nu *e *peci!ic clauza AI?E O*5>C? I.>1?IGI>/ apare eroarea HO/08229$4F missing AI?E O*5>C? OI. clauseI.

111

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

obiect *peci!icat la nivel de vizualizare 2bazat pe c1eia pri%ar *au )enerat de *i*te%5. 8a i obiectele *intetizate6 pot !i *electate re!erine *tocate per*i*tent i reinute 0n coloanele unei vizualizri obiect. 9e!erinele create relativ la obiecte *intetizate prin inter%ediul vizualizrilor obiect nu pot !i6 0n*6 *tocate per*i*tent. En e7e%plul e7pu* anterior6 !iecare obiect din vizualizarea obiect 6i :galerii are un identi!icator obiect unic6 derivat din valoarea codului )aleriei. En cazul relaional6 le)tura dintre tab:opere i tab:galerii *e !ace prin c1eia e7tern cod:gal din tabelul tab:opere. .denti!icatorii obiect din vizualizarea 6i :galerii *unt bazai pe c1eia pri%ar. e aceea6 e*te per%i* !olo*irea valorii c1eii e7terne 0n vizualizarea 6i :opere6 la crearea unei re!erine ctre un obiect din 6i :galerii. E0e1pl27 a5 , *e %odi!ice vizualizarea 6i :opere6 a*t!el 0nc:t * conin pentru !iecare oper de art o re!erin la )aleria din care !ace parte. ,unt nece*are %odi!icri a*upra tipului t:opera creat anterior i a vizualizrii 6i :galerii6 care va trebui * includ 0n de!iniia ei o valoare pentru noul atribut al tipului t:opera.
A0TER TYPE t_"pera A// ATTR5B-TE re*_'a CASCA/E% RE1 t_'a erie

CREATE OR REP0ACE V5E? $i4_'a erii O1 t_'a erie ?5TH OBJECT 5/E,T515ER ((")) AS SE0ECT '=(")_'a , '=nume_'a , '=nume_( a)ire, t_a)resa ('=stra)a_'a , '="ras_'a , '=Bu)et_'a ,'=(")p"sta ) AS a)resa_'a , CAST (.-0T5SET( SE0ECT "=("), "=tit u, "=tip, "=$a "are, "=(")_artist, CAST (.-0T5SET ( SE0ECT p=(")_p" ita, p=)es(riere, p=*irma, p=$a "are 1RO. ta#_p" ite p ?HERE p=(")_"pera A "=(")) AS t_p" ite_ti), ,-00 1RO. ta#_"pere " ?HERE "=(")_'a A '=(")_'a ) AS t_"pere_ti) 1RO. ta#_'a erii '% CREATE OR REP0ACE V5E? $i4_"pere O1 t_"pera ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT "=("), "=tit u, "=tip, "=$a "are, "=(")_artist, ,-00, .AGE_RE1($i4_'a erii, "=(")_'a ) 1RO. ta#_"pere "%

b5 Rtiind c re+:gal conine o re!erin ctre )alerie6 * *e li*teze toate operele din )aleriile cu locaia 0n #i%ioara.
SE0ECT "=("), "=tit u, "=re*_'a =nume_'a 1RO. $i4_"pere " ?HERE "=re*_'a =a)resa_'a ="ras A 6Timis"ara6%

Orientare pe obiecte n Oracle9i

111

c5 , *e i%ple%enteze alt %odalitate de de!inire a vizualizrii 6i :opere. ,e va !olo*i operatorul />G pentru a obine o re!erin ctre obiectul a*ociat din vizualizarea 6i :galerii. En ace*t caz6 *e realizeaz un "oin 0ntre vizualizarea 6i :galerii i tabelul tab:opere6 prin c1eia cod:gal.
CREATE OR REP0ACE V5E? $i4_"pere O1 t_"pera ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT "=("), "=tit u, "=tip, "=$a "are, "=(")_artist, ,-00, RE1(') 1RO. ta#_"pere ", $i4_'a erii ' ?HERE "=(")_'a A '=(")%

Avantajul utilizrii operatorului ;0F>:/>G 0n loc de />G e*te acela c prin inter%ediul pri%ului *e pot crea i re!erine circulare. e e7e%plu6 *e poate crea vizualizarea 6i :opere a*t!el 0nc:t !iecare linie * conin o re!erin ctre obiectul )alerie a*ociat6 iar vizualizarea 6i :galerii * aib ca atribut o li*t de re!erine ctre operele coninute.

6e%inirea relaiilor co(ple+e dintre vi!uali!rile obiect


9e!erinele circulare dintre vizualizrile obiect 2de e7e%plu6 vizualizarea obiect a re!er b care la r:ndul ei re!er a5 pot !i de!inite utiliz:nd operatorul ;0F>:/>G. En ace*t !el6 vizualizrile obiect per%it *inteza unei *tructuri co%ple7e de date6 cu% ar !i un )ra! conin:nd circuite. &7i*t dou %etode de a crea re!erine circulare 0ntre dou vizualizri obiect. (ri%a %etod con*t 0n a aju*ta pri%a vizualizare dup crearea celei de@a doua. &a pre*upune ur%torii paiF crearea vizualizrii a !r re!erirea vizualizrii bG crearea vizualizrii b6 care include o re!erin la vizualizarea aG 0nlocuirea vizualizrii a cu o nou de!iniie care include re!erina la vizualizarea bG 8ea de@a doua %etod con*t 0n a crea pri%a vizualizare utiliz:nd cuv:ntul c1eie GO/C> i pre*upune ur%torii paiF crearea vizualizrii a cu re!erine la vizualizarea b6 utiliz:nd cuv:ntul c1eie GO/C> 2vizualizarea a e*te invalid5G crearea vizualizrii b cu re!erin la vizualizarea a 2la pri%a utilizare a vizualizrii a6 ea e*te validat i reco%pilat5. A doua %etod are %ai puini pai6 dar e*te %ai ri*cant pentru c opiunea GO/C> poate a*cunde erori neprevzute 0n de!iniia vizualizrii. En ace*t caz trebuie intero)at vizualizarea <S>/:>//O/S din dicionarul datelor6 pentru a vedea dac au aprut alte erori dec:t cele prevzute. e a*e%enea6 dac erorile per*i*t i nu per%it validarea vizualizrilor la pri%a utilizare6 ele trebuie re%ediate i vizualizarea trebuie reco%pilat %anual6 utiliz:nd co%anda 0)?>/ &I>ABCO;3I)>. 9elaiile one8to8one pot !i %odelate cu ajutorul re!erinelor obiect circulare. ,e pre*upune c !iecare *peciali*t are a*ociat un unic calculator per*onal i c acel calculator aparine doar unui *peciali*t. +n %odel relaional ar capta acea*t *ituaie utiliz:nd o c1eie e7tern de la tabelul de *pecialiti ctre cel de calculatoare *au inver*. +tilizarea vizualizrilor obiect per%ite %odelarea obiectelor a*t!el 0nc:t * e7i*te o le)tur dubl. E0e1pl27 /ie tabelele relaionale tab:specialiTti i tab:computere. , *e creeze tipurile t:computer6 t:specialist i vizualizrile 6i :computere6 6i :specialisti i%ple%ent:nd relaia one8to8one dintre

112
ace*tea prin re!erine circulare.

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

CREATE TAB0E ta#_("mputere( (") ,-.BER PR5.ARY GEY, tip VARCHAR2(20) /E1A-0T 6)esJt"p6, pr"(es"r VARCHAR2(!0), )es(riere VARCHAR2(200))% CREATE TAB0E ta#_spe(ia isti( (") ,-.BER PR5.ARY GEY, nume VARCHAR2(+0), aut"ri4atie VARCHAR2(+), a)resa RE1 t_a)resa, (")_("mputer ,-.BER RE1ERE,CES ta#_("mputere ((")))% CREATE TYPE t_spe(ia ist% & CREATE TYPE t_("mputer AS OBJECT ( (") ,-.BER, tip VARCHAR2(20), pr"(es"r VARCHAR2(!0), )es(riere VARCHAR2(200), (")_spe( RE1 t_spe(ia ist)% & CREATE OR REP0ACE TYPE t_spe(ia ist AS OBJECT ( (") ,-.BER, nume VARCHAR2(+0), aut"ri4atie VARCHAR2(+), a)resa RE1 t_a)resa, (")_("mp RE1 t_("mputer)% & CREATE V5E? $i4_("mputere O1 t_("mputer ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT (=("), (=tip, (=pr"(es"r, (=)es(riere, ,-00 1RO. ta#_("mputere (% CREATE V5E? $i4_spe(ia isti O1 t_spe(ia ist ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT s=("), s=nume, s=aut"ri4atie, s=a)resa, .AGE_RE1 ($i4_("mputere, s=(")_("mputer) 1RO. ta#_spe(ia isti s% CREATE OR REP0ACE V5E? $i4_("mputere O1 t_("mputer ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT (=("), (=tip, (=pr"(es"r, (=)es(riere, (SE0ECT .AGE_RE1 ($i4_spe(ia isti, (=(")) 1RO. ta#_spe(ia isti s ?HERE (=(") A s=(")_("mputer) 1RO. ta#_("mputere (%

9elaiile one8to8man= pot !i %odelate prin utilizarea re!erinelor obiect *au prin le)area direct a obiectelor. Ace*t tip de relaii pot !i reprezentate cu ajutorul unor colecii de obiecte *au de re!erine obiect core*punztoare cardinalitii man=. ,e con*ider cazul entitilor galerie i opera. En %odelul relaional cla*ic6 c1eia e7tern *e a!l 0n tabelul cu opere de art. ,e poate6 0n*6 proiecta relaia dintre )alerii i opere utiliz:nd colecii

Orientare pe obiecte n Oracle9i

113

0n cadrul vizualizrilor obiect. Aa cu% *@a e7e%pli!icat %ai *u*6 vizualizarea 6i :galerii poate conine o colecie de opere de art6 iar vizualizarea 6i :opere o re!erin ctre )alerie *au c1iar coloane de tipul a*ociat entitii galerie. A*t!el6 relaia e*te i%ple%entat 0n a%bele *en*uri 0ntre cele dou entiti6 at:t de la opera la galerie6 c:t i inver*. (entru a con*erva *paiu6 e7i*t po*ibilitatea ca vizualizarea 6i :galerii * conin o colecie de re!erine ctre obiecte de tip t:opera:de:arta i nu obiectele %aterializate propriu@zi*e. 8u% tipul obiect a*ociat entitaii opera conine o re!erin ctre )aleria din care !ace parte6 apar re!erine circulare 0ntre vizualizrile 6i :galerii i 6i :opere. E0e1pl27 ,e con*ider tabelele tab:opere i tab:galerii de!inite anterior. #ipul t:opera conine o coloan de tip re!erin la t:galerie. =i*ta de re!erine la operele de art va !i i%ple%entat *ub !or%a unui tabel i%bricat. ,e %odi!ic tipul t:galerie6 a*t!el 0nc:t * conin o coloan de tip t:lista:re+:opere. , *e de!inea*c vizualizrile !olo*ind cele dou %etode de*cri*e %ai *u*.
/ROP V5E? $i4_'a erii 1ORCE% /ROP V5E? $i4_"pere 1ORCE% CREATE TYPE t_ ista_re*_"pere AS TAB0E O1 RE1 t_"pera% & A0TER TYPE t_'a erie /ROP ATTR5B-TE ista_"pere CASCA/E% A0TER TYPE t_'a erie A// ATTR5B-TE ista_re*_"pere t_ ista_re*_"pere CASCA/E% A0TER TYPE t_"pera /ROP ATTR5B-TE ista_p" ite CASCA/E%

;etoda 1F
CREATE V5E? $i4_"pere O1 t_"pera ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT "=("), "=tit u, "=tip, "=$a "are, "=(")_artist, ,-00 1RO. ta#_"pere "% CREATE V5E? $i4_'a erii O1 t_'a erie ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT '=(")_'a , '=nume_'a , '=nume_( a)ire, t_a)resa('=stra)a_'a , '="ras_'a , '=Bu)et_'a , '=(")p"sta ), CAST (.-0T5SET ( SE0ECT .AGE_RE1($i4_"pere, "=(")) 1RO. ta#_"pere " ?HERE "=(")_'a A '=(")_'a ) AS t_ ista_re*_"pere) 1RO. ta#_'a erii '% CREATE OR REP0ACE V5E? $i4_"pere O1 t_"pera ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT "=("), "=tit u, "=tip, "=$a "are, "=(")_artist, .AGE_RE1($i4_'a erii, "=(")_'a ) 1RO. ta#_"pere "%

;etoda 2F
CREATE 1ORCE V5E? $i4_"pere O1 t_"pera

114

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

?5TH OBJECT 5/E,T515ER((")) AS SE0ECT "=("), "=tit u, "=tip, "=$a "are, "=(")_artist, .AGE_RE1($i4_'a erii, "=(")_'a ) 1RO. ta#_"pere "% CREATE V5E? $i4_'a erii O1 t_'a erie ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT '=(")_'a , '=nume_'a , '=nume_( a)ire, t_a)resa('=stra)a_'a , '="ras_'a , '=Bu)et_'a , '=(")p"sta ), CAST (.-0T5SET ( SE0ECT .AGE_RE1($i4_"pere, "=(")) 1RO. ta#_"pere " ?HERE "=(")_'a A '=(")_'a ) AS t_ ista_re*_"pere) 1RO. ta#_'a erii '%

E0e1pl27 a5 , *e li*teze in!or%aii co%plete de*pre operele de art din )aleria av:nd codul 1. A%bele %etode de creare prezentate %ai *u* per%it intero)area vizualizrilor 6i :galerii6 6i :opere i dere!erenierea ele%entelor tabloului i%bricat lista:re+:opere6 re!erite prin cuv:ntul c1eie CO)<;1:&0)<>.
SE0ECT /ERE1("=CO0-.,_VA0-E) 1RO. TAB0E(SE0ECT '= ista_re*_"pere 1RO. $i4_'a erii ' ?HERE '=(") A 2) "%

b5 , *e *electeze codurile operelor de art al cror titlu conine irul de caractere H!loriI i aparin )aleriei av:nd codul 1.
SE0ECT "=CO0-.,_VA0-E=(") 1RO. TAB0E(SE0ECT '= ista_re*_"pere 1RO. $i4_'a erii ' ?HERE '=(") A 2) "% ?HERE 0O?ER("=CO0-.,_VA0-E=tit u) 05GE 6K* "riK6%

c5 , *e *electeze nu%ele )aleriei6 codul i titlul operei de art pentru acele opere care !ac parte din )aleria av:nd codul 1 i care conin 0n titlu *ecvena H!loriI. (entru ca rezultatul * !ie tabelar6 *e poate di*tribui li*ta de re!erine prin introducerea unui "oin 0ntre vizualizare i coloana de tip tablou i%bricat.
SE0ECT 1RO. ?HERE A,/ '=nume_'a , "=CO0-.,_VA0-E=("), "=CO0-.,_VA0-E=tit u $i4_'a erii ', TAB0E('= ista_re*_"pere) " 0O?ER("=CO0-.,_VA0-E=tit u) iJe 6K* "riK6 )=(") A 2%

d5 , *e re*crie intero)area de la punctul anterior6 utiliz:nd re!erinele coninute 0n vizualizarea 6i :opere6 0n *en* inver*.
SE0ECT 1RO. ?HERE A,/ "=re*_'a =nume_'a , /ERE1("=CO0-.,_VA0-E) $i4_"pere ", TAB0E("=re*_'a = ista_re*_"pere) " "=re*_)ep=(") A 2 0O?ER("=CO0-.,_VA0-E=tit u) iJe 6K* "riK6%

Orientare pe obiecte n Oracle9i

11"

*i!uali!ri obiect asupra tabelelor distante


+n avantaj i%portant al vizualizrilor obiect e*te c6 prin inter%ediul lor6 *e pot acce*a tabelele di*tante *ub !or% obiectual. Nu e7i*t alt %odalitate de a !ace ace*t lucru6 ne!iind per%i* acce*ul direct a*upra tabelelor obiect di*tante. E0e1pl27 ,e con*ider un %uzeu cu dou !iliale6 unul 0n >ucure*ti i altul 0n .ai. /iecare locaie are c:te un tabel 0n care *unt 0nre)i*trate operele de art. ac la un %o%ent dat *e dorete o *ituaie centralizat a*upra tuturor picturilor aparin:nd %uzeului re*pectiv6 atunci *e pot crea dou vizualizri )enerale a*upra tabelelor di*tante6 i apoi o vizualizare ce va *electa doar picturile din a%bele *ur*e de date.
CREATE V5E? $i4_"pere_iasi (("), tit u, tip, $a "are, (")_artist) AS SE0ECT "=("), "=tit u, "=tip, "=$a "are, "=(")_artist 1RO. ta#_"pereU e'atura_iasi "% CREATE V5E? $i4_"pere_#u(uresti (("), tit u, tip, $a "are, (")_artist) AS SE0ECT "=("), "=tit u, "=tip, "=$a "are, "=(")_artist 1RO. ta#_"pereU e'atura_#u(uresti "% CREATE V5E? $i4_t"ate_pi(turi e O1 t_"pera ?5TH OBJECT 5/E,T515ER ((")) AS SE0ECT "i=("), "i=tit u, "i=tip, "i=$a "are, "i=(")_artist 1RO. $i4_"pere_iasi "i ?HERE "i=tip A 6pi(tura6 -,5O, SE0ECT "#=("), "#=tit u, "#=tip, "#=$a "are, "#=(")_artist 1RO. $i4_"pere_#u(uresti "# ?HERE "#=tip A 6pi(tura6%

".3. Ierarhii de vi!uali!ri obiect


O ierar1ie de vizualizri obiect e*te un *et de vizualizri obiect bazate pe c:te un tip di!erit aparin:nd unei ierar1ii de tipuri. A*e%ntor %ecani*%ului de e7tindere de la tipuri6 *ubvizualizrile dintr@o ierar1ie obiect *unt create e7tinz:nd o *upervizualizare 2prin inter%ediul cuv:ntului c1eie <1.>/5. /iecare vizualizare obiect dintr@o ierar1ie de vizualizri conine obiecte de un *in)ur tip6 dar intero)rile adre*eaz i%plicit i *ubvizualizrile. (rin ur%are6 o a*t!el de ierar1ie reprezint o %odalitate *i%pl de i%ple%entare a intero)rilor ce returneaz un *et poli%or!ic de obiecte6 la un nivel de *pecializare dat. &7e%plele din acea*t *eciune vor !i bazate pe ierar1ia de tipuri creat anterior. #ipul t:persoana e*te tipul rdcin i are doi HcopiiI6 t:artist i t:autor. #ipul t:autor are6 la r:ndul lui6 *pecializarea t:"urnalist. ac *e creeaz o ierar1ie de vizualizri bazat pe acea*t ierar1ie de tipuri6 av:nd c:te o vizualizare obiect con*truit pentru !iecare tip6 atunci *e poate intero)a vizualizarea obiect care core*punde nivelului de *pecializare nece*ar la un %o%ent dat. e e7e%plu6 *e poate intero)a vizualizarea a*ociat tipului t:autor pentru a deter%ina un *et de rezultate re!eritor doar la autori6 inclu*iv jurnaliti. ;izualizarea rdcin poate !i a*ociat oricruia dintre tipurile din ierar1ia de tipuri. Nu e*te

11'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

obli)atoriu * *e a*ocieze o vizualizare obiect tipului rdcin. e a*e%enea6 nu e*te nece*ar e7tinderea ierar1iei p:n la tipurile !runze ale ierar1iei de tipuri i nici nu trebuie acoperite toate ra%urile ace*teia. En *c1i%b6 nu *e pot o%ite *ubtipuri inter%ediare pe vreo linie de*cendent a ierar1iei. Orice *ubvizualizare trebuie bazat pe un *ubtip direct al tipului *upervizualizrii ei. O vizualizare obiect poate avea %ai %ulte *ubvizualizri. ,ubvizualizrile bazate pe un tip dat pot participa doar 0ntr@o *in)ur ierar1ie de vizualizri obiect. i!erite ierar1ii nu pot conine vizualizri a*ociate aceluiai tip. O *ubvizualizare %otenete identi!icatorul obiect de la *upervizualizare. Ace*ta poate !i de!init 0n %od e7plicit doar 0n vizualizarea rdcin a ierar1iei. Nu *e poate *peci!ica e7plicit un identi!icator obiect 0ntr@o *ubvizualizare. ac ace*ta e*te identi!icatorul )enerat de *i*te% *au clauza nu e*te *peci!icat 0n vizualizarea rdcin6 atunci pot !i create *ubvizualizri doar dac vizualizarea rdcin e*te bazat pe un tabel *au o vizualizare care utilizeaz tot un identi!icator obiect )enerat de *i*te%. (entru *ubvizualizri *e aplic aceleai re)uli ca i la vizualizri obinuite6 cu privire la *ituaiile 0n care pot !i %odi!icate prin co%enzi );.. ac o *ubvizualizare e*te inerent ne%odi!icabil i trebuie %odi!icat6 atunci *e de!ine*c declanatori de tip I1S?>0. OG *peci!ici. eclanatorii de tip I1S?>0. OG nu *e %otene*c. #oate vizualizrile dintr@o ierar1ie trebuie * aparin aceleiai *c1e%e. ;er*iunea Oracle9i per%ite crearea de vizualizri a*ociate tipurilor nein*taniabile. +n tip nein*taniabil nu poate avea in*tane aa c6 la pri%a vedere6 nu ar !i util crearea unei vizualizri obiect a*ociate. +n tip nein*taniabil poate avea 0n*6 *ubtipuri in*taniabile6 iar po*ibilitatea de!inirii vizualizrilor obiect pentru tipuri nein*taniabile per%ite con*truirea ierar1iilor de vizualizri obiect a*ociate unor ierar1ii de tipuri care conin tipuri nein*taniabile.

Crearea ierarhiilor de vi!uali!ri obiect


O ierar1ie de vizualizri obiect *e con*truiete prin crearea de *ubvizualizri core*punztoare *ubtipurilor tipului a*ociat vizualizrii rdcin. O a*t!el de ierar1ie poate !i bazat pe di!erite %odele relaionale de *tocare a datelor6 deci poate !i produ* dintr@o varietate de tabele de baz. Ale)erea %odelului de *tocare are i%plicaii a*upra per!or%anei i !le7ibilitii %odi!icrii ierar1iei de vizualizri obiect. ,unt e7e%pli!icate trei po*ibiliti de *tocare. %odelul +lat6 0n care toate vizualizrile din ierar1ia obiect *unt bazate pe acelai tabelG %odelul orizontal6 0n care !iecare vizualizare are o core*ponden one8to8one cu !iecare tabelG %odelul vertical6 0n care vizualizrile *unt con*truite !olo*ind "oin@uri 0ntre tabelele de baz.

&odelul "lat
En %odelul +lat6 toate vizualizrile din ierar1ie *unt bazate pe acelai tabel. En e7e%plul ce ur%eaz6 unicul tabel relaional de baz 2 ?oate3ersoanele5 conine coloane pentru toate atributele tipurilor t:persoana6 t:autor i t:artist.
CREATE TAB0E T"atePers"ane e ( (")_tip ,-.BER(2), >> (") as"(iat tipu ui (") ,-.BER, >> pers"ana nume VARCHAR2(+0), (")_aut"r ,-.BER, >> aut"r

Orientare pe obiecte n Oracle9i "(upatie )es(riere (")_artist an_nastere an_m"arte nati"na itate VARCHAR2(30), VARCHAR2(200), ,-.BER, >> artist VARCHAR2(!), VARCHAR2(!), VARCHAR2(!0))%

11)

A !o*t introdu* o coloan *upli%entar 2cod:tip5 care de*e%neaz tipul 0nre)i*trrii. &a poate avea trei valori 216 2 *au 35 0n !uncie de tipul care trebuie a*ociat liniei re*pective 2 t:persoana6 t:autor6 re*pectiv t:artist5. ;izualizrile din ierar1ia de vizualizri obiect *unt de!inite dup cu% ur%eaz. /iecare in*tan obiect *intetizat 0n cadrul unei vizualizri core*punde unei linii din tabel.
CREATE V5E? $i4_pers"ane O1 t_pers"ana ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT ("), nume 1RO. T"atePers"ane e ?HERE (")_tip A 2% CREATE V5E? $i4_aut"ri O1 t_aut"r -,/ER $i4_pers"ane AS SE0ECT ("), nume, (")_aut"r, "(upatie, )es(riere 1RO. T"atePers"ane e ?HERE (")_tip A 2% CREATE V5E? $i4_artisti O1 t_artist -,/ER $i4_pers"ane AS SE0ECT ("), nume, (")_artist, an_nastere, an_m"arte, nati"na itate 1RO. T"atePers"ane e ?HERE (")_tip A 3%

Modelul +lat are avantajul *i%plitii i nu )enereaz nici un ob*tacol 0n crearea indecilor i a con*tr:n)erilor. +nul dintre dezavantajele ace*tui %odel e*te c un *in)ur tabel poate avea cel %ult 1--- de coloane. A*t!el6 %odelul +lat i%pune acea*t li%it a*upra nu%rului total de coloane pe care le poate conine ierar1ia de vizualizri obiect. e a*e%enea6 !iecare linie a tabelului are %ulte valori null a*ociate atributelor care nu aparin celui %ai *peci!ic tip al liniei curente. Ace*te valori pot a!ecta per!or%anele operaiilor a*upra vizualizrilor.

&odelul ori!ontal
En %odelul orizontal6 !iecrei vizualizri *au *ubvizualizri 0i core*punde un tabel di*tinct. #abelele de baz pot !i relaionale6 re*pectiv tabele obiect pentru care *ub*tituibilitatea coloanelor e*te dezactivat.
CREATE TAB0E )"ar_pers"ane ( (") ,-.BER, nume VARCHAR2(+0))% CREATE TAB0E )"ar_aut"ri ( (") ,-.BER, nume VARCHAR2(+0), (")_aut"r ,-.BER, "(upatie VARCHAR2(30), )es(riere VARCHAR2(200))% CREATE TAB0E )"ar_artisti ( (") ,-.BER,

11,
nume (")_artist an_nastere an_m"arte nati"na itate

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE VARCHAR2(+0), ,-.BER, VARCHAR2(!), VARCHAR2(!), VARCHAR2(!0))%

En ace*t caz6 la con*truirea vizualizrilor nu *unt nece*are "oin@uri. /iecrei vizualizri din ierar1ie 0i core*punde un tabel relaional. e a*e%enea6 o in*tan obiect e*te *intetizat dintr@o *in)ur linie a unui tabel de baz al %odelului.
CREATE V5E? $i4_pers"ane O1 t_pers"ana ?5TH OBJECT 5/E,T515ER((")) AS SE0ECT H 1RO. )"ar_pers"ane % CREATE V5E? $i4_aut"ri O1 t_aut"r -,/ER $i4_pers"ane AS SE0ECT H 1RO. )"ar_aut"ri% CREATE V5E? $i4_artisti O1 t_artist -,/ER $i4_pers"ane AS SE0ECT H 1RO. )"ar_artisti%

Modelul orizontal e*te util pentru e7ecutarea e!icient a intero)rilor care *electeaz 0nre)i*trri core*punztoare unui anu%it nivel de *pecializare. E0e1pl25 , *e *electeze in!or%aii co%plete de*pre toi artitii din vizualizarea 6i :persoane. #rebuie a!iate in!or%aii re!eritoare nu%ai la in*tanele care au cel %ai *peci!ic tip t:artist.
SE0ECT VA0-E(p) 1RO. $i4_pers"ane p ?HERE VA0-E(p) 5S O1 (O,0Y t_artist)%

A*t!el de cereri acce*eaz un *in)ur tabel !izic pentru a returna obiectele de tipul *peci!icat. ezavantajele %odelului *unt acelea c intero)rile de tipul S>)>C? 9 G/O; 6i uali are nece*it e7ecutarea unui operator <1IO1 a*upra tuturor tabelelor de baz i apoi proiectarea liniilor doar a*upra coloanelor din vizualizarea dat. e a*e%enea6 %odelul nu per%ite crearea de indeci *au con*tr:n)eri de tip <1I2<> a*upra atributelor tipurilor. Ace*tea ar trebui * acioneze a*upra %ai %ultor tabele i ace*t lucru nu e*te po*ibil.

&odelul vertical
En %odelul vertical nu e7i*t o core*ponden 0ntre un tabel !izic i o vizualizare din ierar1ie. /iecare tabel !izic *toc1eaz doar acele atribute care *unt unice *ubtipului core*pondent lui.
CREATE TAB0E T"atePers"ane e ( (")_tip ,-.BER, (") ,-.BER, nume VARCHAR2(+0))% CREATE TAB0E T"tiAut"rii ( (") ,-.BER, (")_aut"r ,-.BER, "(upatie VARCHAR2(30), )es(riere VARCHAR2(200))% CREATE TAB0E T"tiArtistii ( (") ,-.BER,

Orientare pe obiecte n Oracle9i (")_artist an_nastere an_m"arte nati"na itate ,-.BER, VARCHAR2(!), VARCHAR2(!), VARCHAR2(!0))%

110

,i%ilar %odelului +lat6 e*te nece*ar de!inirea unei coloane *upli%entare pentru identi!icarea tipului 2cod:tip5. Acea*t coloan e*te inclu* nu%ai 0n tabelul re!eritor la per*oane 2?oate3ersoanele5. O in*tan obiect e*te *intetizat din unul *au %ai %ulte tabele relaionale ale %odelului. Atributele *peci!ice !iecrui tip obiect din ierar1ia i%ple%entat *unt obinute prin inter%ediul "oin@ului dintre tabelele a*ociate tuturor tipurilor ce apar pe dru%ul de la tipul rdcin p:n la tipul re*pectiv. =e)tura dintre tabelele %odelului6 *e !ace prin c1eia pri%ar cod6 care e*te utilizat i ca identi!icator obiect.
CREATE V5E? $i4_pers"ane O1 t_pers"ana ?5TH OBJECT 5/E,T515ER ((")) AS SE0ECT ("), nume 1RO. T"atePers"ane e ?HERE (")_tip A 2% CREATE V5E? $i4_stu)enti O1 t_aut"r -,/ER $i4_pers"ane AS SE0ECT p=("), p=nume, au=(")_aut"r, au="(upatie, au=)es(riere 1RO. T"atePers"ane e p, T"tiAut"rii au ?HERE p=(")_tip A 2 A,/ au=(") A p=(")% CREATE V5E? $i4_artisti O1 t_artist -,/ER $i4_pers"ane AS SE0ECT p=("), p=nume, ar=(")_artist, ar=an_nastere, ar=an_m"arte, ar=nati"na itate 1RO. T"atePers"ane e p, T"tiArtistii ar ?HERE p=(")_tip A 3 A,/ ar=(") A ar=(")%

/olo*ind %odelul vertical6 *e pot proce*a e!icient cererile de tip S>)>C? 9 G/O; 6i :rdcina. e a*e%enea6 e*te po*ibil * *e inde7eze i * *e i%pun con*tr:n)eri de unicitate a*upra atributelor individuale. En *c1i%b6 pentru a recrea o in*tan a unui tip6 altul dec:t tipul rdcin6 trebuie e7ecutat cel puin un "oin. Ace*t lucru poate reduce din per!or%ane.

Interogarea unei vi!uali!ri dintr:o ierarhie


Orice vizualizare *au *ubvizualizare dintr@o ierar1ie de vizualizri obiect poate !i intero)at6 !iind returnate liniile core*punztoare at:t tipului a*ociat vizualizrii intero)ate6 c:t i ale *ubtipurilor ace*tuia. e e7e%plu6 0n ierar1ia de vizualizri obiect bazat pe ierar1ia de tipuri cu rdcina t:persoana6 *e poate intero)a vizualizarea 6i :persoane pentru a re)*i o %uli%e rezultat care conine toate per*oanele6 inclu*iv autori i artiti. ,i%ilar intero)rii tabelelor obiect6 0n li*ta S>)>C? pot !i inclu*e !unciile />G i &0)<>6 ce returneaz in*tane obiect6 *au *e pot *peci!ica atributele obiectelor de tipul declarat al vizualizrii 2de e7e%plu6 nume i cod pentru tipul t:persoana5. At:t *peci!icarea atributelor a*ociate tipului declarat al unei vizualizri6 c:t i utilizarea !unciilor care 0ntorc in*tane obiect a*i)ur returnarea unui *et poli%or!ic de date6 adic in*tane de tipul vizualizrii i de *ubtipurile ace*tuia. E0e1pl27

121

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

, *e introduc 0nre)i*trri core*punztoare !iecrui tip de date din ierar1ia av:nd tipul rdcin t:persoana 2*e con*ider %odelul orizontal5. , *e a!ieze in*tanele per*oanelor6 artitilor6 autorilor i re!erinele la ace*te in*tane.
5,SERT 5,TO )"ar_pers"ane (("), nume) VA0-ES (2, 67e"r'e 5"nes(u6)% 5,SERT 5,TO )"ar_artisti (("), nume, (")_artist, an_nastere, an_m"arte, nati"na itate) VA0-ES (2, 6C"nstantin Bran(usi6, 2, 2;9:, 2<+9, 6r"mana6)% 5,SERT 5,TO )"ar_aut"ri (("), nume, (")_aut"r, "(upatie, )es(riere) VA0-ES (3, 65r$in' St"ne6, 2, 6s(riit"r6, 6.i(3e an'e "6)% CO..5T% SE0ECT VA0-E (p) , RE1 (p) 1RO. $i4_pers"ane p%

En cazul *peci!icrii 0n li*ta S>)>C? a atributelor individuale ale tipului a*ociat vizualizrii *au a caracterului HSI6 liniile *unt proiectate pe coloanele a*ociate atributelor tipului declarat al vizualizrii i nu *unt a!iate dec:t ace*te coloane. 8u alte cuvinte6 *ubtipurile *unt a!iate re*pect:nd doar atributele pe care le %otene*c de la tipul declarat al vizualizrii. (entru a e7clude *ubvizualizrile din rezultat6 *e !olo*ete cuv:ntul c1eie O1)@. Ace*ta ra!ineaz *elecia6 per%i:nd obinerea doar a obiectelor pentru care cel %ai *peci!ic tip e*te identic cu tipul vizualizrii intero)ate. E0e1pl27 , *e a!ieze in!or%aii co%plete de*pre toate per*oanele 2inclu*iv artitii i autorii5. 9ezultatul utilizeaz doar coloanele core*punztoare atributelor tipului t:persoana 2nume i cod5 i nu li*teaz atributele *peci!ice *ubtipurilor. e a*e%enea6 * *e a!ieze codul i nu%ele per*oanelor6 e7cluz:ndu@le pe cele care *unt artiti *au autori.
SE0ECT H 1RO. $i4_pers"ane% SE0ECT VA0-E(p) 1RO. O,0Y ($i4_pers"ane) p%

.rivilegii asupra ierarhiilor obiectuale


e obicei6 o cerere a*upra unei vizualizri care are *ubvizualizri nece*it privile)iul S>)>C? doar a*upra vizualizrii re!erite i nici un privile)iu e7plicit a*upra *ubvizualizrilor. e e7e%plu6 cererea S>)>C? 9 G/O; 6i :persoane i%pune e7i*tena privile)iului S>)>C? a*upra vizualizrii 6i :persoane6 dar nu i a*upra *ubvizualizrilor ace*teia6 6i :artisti i 6i :autori. O intero)are care *electeaz toate atributele din *ubtipuri6 dar nu utilizeaz tipul rdcin nece*it privile)iul S>)>C? a*upra tuturor *ubvizualizrilor. Ace*t lucru *e 0nt:%pl deoarece atributele *ubtipurilor pot conine in!or%aii i%portante care nece*it privile)ii adiionale de acce*. En con*ecin6 pentru cererea S>)>C? &0)<>2p5 G/O; 6i :persoane p e*te nece*ar privile)iul S>)>C? at:t a*upra 6i :persoane6 c:t i a*upra *ubvizualizrilor 6i :autori6 6i :artisti 2*au a*upra oricrei alte *ubvizualizri a lui 6i :persoane5. (entru a !acilita proce*ul de acordare a privile)iilor S>)>C? a*upra unei 0ntre)i ierar1ii6 *e poate utiliza opiunea EI>/0/CE@. Acea*t clauz deter%in acordarea auto%at a privile)iului S>)>C? a*upra tuturor *ubvizualizrilor curente i viitoare ale vizualizrii re*pective. E0e1pl27

Orientare pe obiecte n Oracle9i

121

, i *e acorde utilizatorului student privile)iul de *electare a*upra vizualizrii 6i :persoane i a*upra tuturor *ubvizualizrilor ace*teia.
7RA,T SE0ECT O, $i4_pers"ane TO stu)ent ?5TH H5ERARCHY OPT5O,%

.n!or%aia relativ la cel %ai *peci!ic tip al in*tanelor *electate dintr@o vizualizare poate !i i%portant. e aceea6 o cerere care e7clude liniile ce aparin unor *ubvizualizri pre*upune acordarea privile)iilor S>)>C? a*upra tuturor *ubvizualizrilor. e e7e%plu6 cererea S>)>C? 9 G/O; O1)@ 26i :persoane5 nece*it privile)ii de *electare a*upra tuturor *ubvizualizrilor lui 6i :persoane.

".4. &odi%icarea vi!uali!rilor obiect


A*upra unei vizualizri obiect *e pot e7ecuta operaii );. 0n %od *i%ilar tabelelor obiect. =a iniierea unei co%enzi );.6 dac nu e7i*t vreo a%i)uitate 0n de!iniia vizualizrii6 *i*te%ul %odi!ic tabelele de baz ale ace*teia. up cu% *@a precizat6 o vizualizare nu poate !i %odi!icat prin co%enzi );. dac intero)area a*ociat vizualizrii conine "oin@uri6 operatori S>?6 !uncii )rup6 clauze #/O<3 *@ *au .IS?I1C?. e a*e%enea6 coloanele individuale ale unei vizualizri nu *e pot %odi!ica dac *unt bazate pe p*eudocoloane *au e7pre*ii. 81iar dac o vizualizare nu e*te %odi!icabil 0n %od direct6 ea poate !i totui %odi!icat 0n %od indirect6 utiliz:nd declanatori de tip I1S?>0. OG. Entr@un declanator de ace*t tip *e i%ple%enteaz operaiile care trebuie * aib loc a*upra tabelelor de baz ale vizualizrii obiect6 la iniierea unei co%enzi );.. Atunci c:nd *e lan*eaz o co%and );. pentru care e*te prevzut un declanator6 *i*te%ul e7ecut 0n %od tran*parent declanatorul a*ociat. Entr@o ierar1ie de vizualizri obiect6 le)tura dintre ace*tea r%:ne HvieI. e aceea6 la !el ca intero)rile a*upra vizualizrilor obiect6 co%enzile <3.0?> i .>)>?> opereaz poli%or!ic. 8u alte cuvinte6 *etul de linii a!ectate de o co%and <3.0?> *au .>)>?> a*upra unei vizualizri include 0n %od i%plicit liniile care 0ndepline*c condiia re*pectiv din orice *ubvizualizare. E0e1pl27 a5 , *e eli%ine 0nre)i*trrile din vizualizarea 6i :persoane6 inclu*iv cele re!eritoare la artiti i autori. Apoi6 * *e eli%ine 0nre)i*trrile din acea*t vizualizare6 e7cluz:ndu@le pe cele relative la artiti *au autori.
/E0ETE 1RO. $i4_pers"ane% RO00BACG% /E0ETE 1RO. O,0Y ($i4_pers"ane)%

b5 , *e %odi!ice nu%ele tuturor per*oanelor ce nu *unt autori *au artiti.


-P/ATE O,0Y ($i4_pers"ane) SET nume A 6,ume n"u6%

A*e%ntor unui tabel obinuit6 un tablou i%bricat poate !i %odi!icat prin in*erarea de noi ele%ente6 prin actualizarea *au ter)erea ele%entelor e7i*tente. En )eneral6 coloanele de tip tablou i%bricat *intetizate 0n cadrul unei vizualizri nu *e pot %odi!ica direct. En *c1i%b6 * i*te%ul Oracle per%ite crearea declanatorilor I1S?>0. OG a*upra coloanelor de tip tablou i%bricat. eclanatorul de tip I1S?>0. OG de!init a*upra unei coloane de tip tablou i%bricat dintr@o vizualizare *e e7ecut c:nd coloana re*pectiv e*te %odi!icat. ac 0ntrea)a colecie e*te 0nlocuit

122

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

2de e7e%plu6 printr@o %odi!icare a liniei HprinteI56 declanatorul a*ociat coloanei de tip tablou i%bricat nu e*te e7ecutat. eclanatorii I1S?>0. OG a*i)ur o %odalitate de %odi!icare a vizualizrilor co%ple7e care alt!el nu ar putea !i %odi!icate. e a*e%enea6 ei pot !i !olo*ii pentru a*i)urarea con*tr:n)erilor6 veri!icarea privile)iilor *au validarea operaiilor );.. +tiliz:nd aceti declanatori *e pot controla obiectele 0n *c1i%bare 2mutating5 prin inter%ediul vizualizrii obiect. E0e1pl27 , *e creeze un declanator care * i%ple%enteze con*tr:n)erea prin care nu%rul operelor de art dintr@o )alerie nu poate depi 1--. ,e pre*upune c tabelul tab:opere are o coloan de tip re!erin6 re+:gal6 ce adre*eaz )aleria din care !ace parte !iecare oper de art. (entru %aterializarea obiectului re!erit de coloana re+:gal *e utilizeaz procedura S>)>C?:O*5>C? din pac1etul <?):/>G.
CREATE OR REP0ACE TR577ER t_ins_"pere 5,STEA/ O1 5,SERT O, $i4_"pere 1OR EACH RO? /EC0ARE $_'a t_'a erie% $_nr_"pere P0S_5,TE7ER% BE75, >>mai intai 'aseste (")u 'a eriei uti i4an) re*erinta -T0_RE1=SE0ECT_OBJECT (I,E?=re*_'a , $_'a )% SE0ECT CO-,T((")) 5,TO $_nr_"pere 1RO. ta#_"pere ?HERE (")_'a A $_'a =(")% 51 $_nr_"pere L << THE, >>se p"ate insera 5,SERT 5,TO ta#_"pere (("), tit u, tip, $a "are, (")_artist, (")_'a ) VA0-ES (I,E?=("), I,E?=tit u, I,E?=tip, I,E?=$a "are, I,E?=(")_artist, $_'a =("))% E0SE RA5SE_APP05CAT5O,_ERROR (>20202, 67a eria a$an) (")u 6CC $_'a =(") CC 6 a atins imita )e 200 )e "pere )e arta6)% E,/ 51% E,/% &

Orientare pe obiecte n Oracle9i

123

'. Lar&e Ob$ect%


Enc de la %ijlocul anilor P$-6 productorii *i*te%elor de )e*tiune a bazelor de date au luat 0n con*iderare nece*itatea i%ple%entrii unor %odaliti de or)anizare i prelucrare a datelor ne*tructurate 2te7t6 i%a)ine6 video6 *unet5. Acea*ta a )enerat apariia unor noi tipuri de date6 care !aciliteaz adaptarea *i*te%elor de baze de date pentru do%enii noi de aplicaii 0n in!or%atic 2*i*te%e )eo)ra!ice6 %edicale6 tiini!ice etc.5.

.reli(inarii
eoarece aplicaiile de baze de date trebuie * a*i)ure o *e%antic din ce 0n ce %ai co%ple76 apare nece*itatea de a or)aniza in!or%aia utiliz:nd diver*e cate)orii de date6 *i%plu i co%ple7 *tructurate6 *e%i*tructurate *au ne*tructurate. Modelul relaional e*te potrivit pentru *tocarea datelor *i%plu *tructurate. ,i*te%ul Oracle a adu)at caracteri*ticile obiectuale6 a*t!el 0nc:t aplicaiile * poat lucra cu date co%ple7 *tructurate 2colecii6 re!erine6 obiecte5. #e1nolo)iile Oracle de )e*tiune a cozilor de %e*aje6 cu% ar !i 0d6anced 2ueueing6 lucreaz cu date *e%i*tructurate 2de e7e%plu6 date 0n !or%at D;)5. (entru a a*i)ura )e*tiunea datelor ne*tructurate6 au !o*t introdu*e tipurile de date )O*. (rincipalele caracteri*tici ale datelor ne*tructurate *unt ur%toareleF nu pot !i de*co%pu*e 0n co%ponente *tandard 2de e7e%plu6 dac i *e a*ociaz !iecrei opere de art o i%a)ine6 atunci6 din punct de vedere !izic6 in!or%aia e*te un ir de bii care nu poate !i *tocat !olo*ind tipurile *tandard ale bazei de date5G au di%en*iuni %ari 2o 0nre)i*trare de tip t:opera:de:arta poate avea c:teva *ute de octei6 dar c1iar i cele %ai re*tr:n*e date %ulti%edia poate avea de o %ie de ori %ai %ult5G pot !i *tocate 0n !iierele *i*te%ului de operare )azd6 dar trebuie * poat !i acce*ate 0n %od e!icient de ctre baza de date. Odat cu r*p:ndirea Internet@ului i a aplicaiilor bazate pe coninut6 a devenit i%perativ ca baza de dateF * a*i)ure tipuri de date pentru *tocarea in!or%aiilor ne*tructurateG * !ie opti%izat pentru )e*tiunea cantitilor %ari de dateG * a*i)ure o %odalitate uni!or% de acce* la datele ne*tructurate6 *tocate 0n interiorulul bazei de date *au 0n a!ara ei.

-ipuri de date i obiecte LOB


Obiectele )O* 2large ob"ect5 *unt !olo*ite pentru *tocarea6 0n interiorul *au e7teriorul bazei de date6 a unui volu% %are de date co%ple7e6 ne*tructurate6 0n !or%at te7t *au binar. #ipul de date )O* per%ite *tocarea unor blocuri de date av:nd cel %ult 4 #*.

124

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

En Oracle$6 aplicaiile care *tocau cantiti %ari de date ne*tructurate utilizau tipurile )O1# *au )O1# /0A. Avantajele utilizrii tipurilor )O* din ver*iunile Oracle,i i Oracle9i !a de tipurile )O1# i )O1# /0A6 care au !o*t p*trate pentru co%patibilitate6 *unt ur%toareleF capacitatea *uperioar a tipurilor )O* 2obiectele de tip )O* au capacitatea de dou ori %ai %are5G po*ibilitatea de!inirii %ai %ultor coloane )O* 0ntr@un tabel 2un tabel 0n Oracle9i poate avea %ai %ulte coloane de tip )O*6 !iecare de un tip di!erit6 0n ti%p ce tipurile )O1# *au )O1# /0A pot !i !olo*ite cel %ult o dat 0ntr@un tabel5G acce*ul aleator pe *eciuni care nu e*te valabil 0n cazul tipului )O1#. +r%toarele re*tricii re!eritoare la tipul )O* au !o*t eli%inate 0n Oracle9i. ,e pot de!ini orice tip de declanatori a*upra tabelelor ce conin coloane de tip )O*. ,uportul pentru atributele 1>A a*ociate declanatorilor de tip *>GO/> la nivel de linie a !o*t e7tin* pentru coloanele de tip )O*. ,e pot de!ini coloane de tip )O* 0n cadrul *paiilor tabel )e*tionate local 2locall= managed tablespaces5 i a celor cu )e*tiune auto%at a *e)%entelor 2 0<?O segment8 managed tablespaces5. #ipul 1C)O* e*te per%i* pentru a de!ini atribute ale tipurilor obiect. ,e pot crea tabele partiionate or)anizate pe baz de inde7 care * conin obiecte de tip )O*. 9utinele pac1etului .*;S:)O* pot !i invocate 0n procedurile de pe %aina client 2client8side5. &*te per%i* in*erarea i %odi!icarea 0nre)i*trrilor ce conin obiecte de tip )O*6 0n cazul unei vizualizri a*upra creia *@a de!init un declanator de tip I1S?>0. OG. En !uncie de localizarea lor !a de baza de date6 *i*te%ul Oracle9i 0%parte tipurile de date )O* 0n dou cate)oriiF tipuri interne 2*)O*6 C)O* i 1C)O*56 *tocate 0n baza de dateG tipuri e7terne 2*GI)>56 *tocate 0n !iierele *i*te%ului de operare. Obiectele )O* interne pot !i per*i*tente *au te%porare. atele de tip )O* interne *unt *tocate 0n cadrul *paiilor tabel ale bazei de date6 a*t!el 0nc:t *e opti%izez utilizarea *paiului de *tocare i *e a*i)ur acce* e!icient la in!or%aii. &7i*t trei tipuri de date )O* interneF tipul *)O* 2*inar= )arge Ob"ect56 ale crui valori *unt co%pu*e din date binare ne*tructurateG tipul C)O* 2Character )arge Ob"ect56 ale crui valori *unt co%pu*e din iruri de caractere6 ce aparin *etului de caractere *peci!icat la nivelul bazei de date 2 .CS5G tipul 1C)O* 21ational Character )arge Ob"ect56 ale crui valori conin iruri de caractere6 ce aparin %uli%ii de caractere naionale 2 1CS5 de!init la nivel de nivelul bazei de date. Obiectele )O* e7terne 2*GI)> 8 binar= +ile5 *unt *tructuri de di%en*iuni %ari ce conin date binare6 *tocate 0n a!ara *paiilor tabel ale bazei de date. #ipul de date *GI)> a*i)ur acce* *ecvenial de tip read8onl= a*upra datelor din !iierele *i*te%ului )azd ale ser6er@ului de baze de date. ,in)ura condiie e*te ca *i*te%ul de operare al ser6er@ului * per%it acce* *ecvenial a*upra ace*tor !iiere.

Orientare pe obiecte n Oracle9i

12"

*alori LOB i locatori


+n obiect de tip )O* are dou co%ponenteF valoarea propriu@zi*G locatorul obiectului 2o adre* care per%ite re)*irea in!or%aiei5. ;aloarea unui obiect )O* intern poate * !ie *tocat 0n cadrul tabelului6 0%preun cu celelalte date din 0nre)i*trare *au 0n a!ara ace*tuia. ac nu *e dezactiveaz *tocarea la nivel de 0nre)i*trare 2inline5 prin inter%ediul opiunii .IS0*)> S?O/0#> I1 /OA din co%anda C/>0?> ?0*)>6 iar valoarea de tip )O* e*te %ai %ic de 4 F*6 atunci ea e*te *tocat inline. En caz contrar6 valoarea e*te *tocat 0n a!ara tabelului 2 out8o+8line5. eoarece obiectele )O* *unt ade*ea de di%en*iune %are6 *tocarea inline va !i relevant doar dac aplicaia !olo*ete at:t obiecte )O* de di%en*iune redu*6 c:t i obiecte %ari. 81iar dac e*te *peci!icat %odalitatea de *tocare6 *i*te%ul detecteaz auto%at i *toc1eaz out8o+8line6 obiectele de tip )O* a cror di%en*iune depete li%ita ad%i* de 4 F*. =ocatorul e*te *i%ilar unei re!erine la locaia real a valorii )O*. Ace*ta e*te *tocat 0ntotdeauna inline. +n locator *e nu%ete intern *au e7tern dup cu% valoarea )O* a*ociat e*te *tocat intern6 re*pectiv e7tern. (entru obiectele )O* interne6 coloana )O* %enine un locator ctre valoarea )O* care e*te *tocat 0ntr@un *paiu tabel al bazei de date. /iecare valoare )O* dintr@o 0nre)i*trare6 re*pectiv atribut al unui obiect are propriul locator i c:te o copie di*tinct a valorii )O*6 *tocat 0n *paiul tabel core*punztor tabelului din care !ace parte. (entru obiectele )O* e7terne6 coloanele *toc1eaz doar locatorii ctre !iierele a*ociate din *i*te%ului de operare. /iecare valoare *au atribut *GI)> al unei 0nre)i*trri are propriul locator *GI)>. ou 0nre)i*trri di!erite pot conine un locator care * re!ere acelai !iier al *i*te%ului de operare.

>tili!area obiectelor de tip LOB

#ipurile de date )O* pot !i !olo*ite pentru de!inirea de atribute *au coloane 0n cadrul tipurilor obiect6 re*pectiv 0n cadrul tabelelor relaionale. Entr@un tabel pot e7i*ta %ai %ulte coloane de tip )O*6 iar tipurile obiect pot utiliza valori )O* at:t pentru atribute6 c:t i pentru para%etrii %etodelor a*ociate. E0e1pl27 , *e de!inea*c tipul obiect t:opera care * conin coloanele descriere de tip C)O*6 +oto de tip *)O* i reporta" de tip *GI)>.
CREATE OR REP0ACE TYPE t_"pera AS OBJECT ( (") ,-.BER, tit u VARCHAR2(30), tip VARCHAR2(20), (")_artist ,-.BER, )es(riere C0OB, *"t" B0OB, rep"rtaB B150E)% &

(entru a crea obiectele )O* interne6 %ai 0nt:i *e !olo*c co%enzi S2) pentru de!inirea tabelelor care conin coloane )O* i pentru iniializarea locatorilor a*ociai ace*tor coloane. Enainte de a utiliza un obiect )O* intern6 coloana *au atributul core*punztor )O* trebuie * conin un locator. e aceea6 iniializarea obiectului )O* cu unul vid e*te obli)atorie 2un obiect vid e*te di!erit de un obiect null prin !aptul c ace*ta din ur% nu conine un locator5. Ace*t lucru *e poate

12'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

realiza 0n S2) *au 3)4S2) utiliz:nd !unciile prede!inite >;3?@:*)O*25 pentru *)O* i >;3?@:C)O*25 pentru C)O* *au 1C)O*. E0e1pl27 , *e de!inea*c tabelul obiect tab:opere6 a*ociat tipului t:opera creat anterior. , *e in*ereze i * *e %odi!ice o 0nre)i*trare 0n ace*t tabel.
CREATE TAB0E ta#_"pere O1 t_"pera (CO,STRA5,T (")_nn CHECG ((") 5S ,OT ,-00), )es(riere /E1A-0T E.PTY_C0OB())% 5,SERT 5,TO ta#_"pere (("), tit u, tip, (")_artist, *"t", rep"rtaB) VA0-ES (2+, 6Spirit6, 6s(u ptura6, 2, E.PTY_B0OB(), ,-00)% -P/ATE ta#_"pere SET )es(riere A 6.ateria K0emnKAnK2;+9KSti Km")ernK6 ?HERE (") A 2+%

,i%ilar de!inirii tabelelor e7terne6 pentru a crea obiecte )O* e7terne trebuie creat un obiect de tip .I/>C?O/@ 2director lo)ic5. Ace*ta e*te un obiect al *c1e%ei prin care *e *peci!ic un alias pentru un director !izic6 ce va conine obiectele )O* e7terne care vor !i acce*ate. (entru a !i proce*ate de ctre ser6er@ul Oracle6 !iierele re!erite trebuie * e7i*te i * aib per%i*iuni de citire. 0lias@ul trebuie creat 0nainte de a e!ectua operaii a*upra obiectelor *GI)>. 8o%anda de creare a unui director are ur%toarea !or%F C/>0?> .I/>C?O/@ nume:dir 0S PcalePG .denti!icatorul cale e*te un ir de caractere care deter%in adre*a directorului !izic re*pectiv. ac *i*te%ul de operare utilizeaz identi!icatori case sensiti6e6 atunci *peci!icarea directorului !izic trebuie * re*pecte ace*t lucru. ,upri%area unui director din dicionarul datelor *e !ace prin co%andaF ./O3 .I/>C?O/@ nume:dirG ,i%ilar obiectelor interne6 obiectele )O* e7terne 2*GI)>5 trebuie * !ie iniializate a*t!el 0nc:t * re!ere un !iier al *i*te%ului de operare. Ace*t lucru *e realizeaz prin inter%ediul !unciei *GI)>10;>256 care pri%ete ca para%etri un director lo)ic creat anterior i nu%ele !iierului a*ociat. e re%arcat c !uncia *GI)>10;>25 nu veri!ic e7i*tena !izic a directorului. E0e1pl27 , *e introduc o 0nre)i*trare 0n tabelul tab:opere. , *e ataeze celor dou 0nre)i*trri e7i*tente 0n tabel6 !iierele e7terne ce conin reportajele a*ociate. ,e pre*upune c ace*te !iiere *e a!l 0n directorul !izic H>QUreporta"eUI.
CREATE OR REP0ACE /5RECTORY )ir_rep"rtaBe AS 6EIXrep"rtaBeX6% 5,SERT 5,TO ta#_"pere (("), tit u, tip, (")_artist, )es(riere, *"t", rep"rtaB) VA0-ES (2+, 6S"are6, 6pi(tura6, 2, 6.ateria KPan4aKAnK2;+;KSti K(u#istK6, E.PTY_B0OB(), B150E,A.E (6)ir_rep"rtaBe6, 6s"are=mpe'6))% -P/ATE ta#_"pere SET rep"rtaB A B150E,A.E(6)ir_rep"rtaBe6,6spirit=mpe'6) ?HERE (") A 2+%

Orientare pe obiecte n Oracle9i

12)

(relucrarea i )e*tiunea c:%purilor de tip )O* *e !ace !ie inte)ral6 cu ajutorul co%enzilor );.6 !ie pe poriuni6 !olo*ind pac1etul .*;S:)O*. En operaiile de prelucrare6 pentru obiectele )O* interne *e utilizeaz *e%antica de copiere 2*e copiaz at:t locatorul c:t i valoarea )O*56 iar pentru obiectele )O* e7terne *e utilizeaz *e%antica re!erin 2e*te copiat doar locatorul5. ,e%antica de copiere !olo*it de obiectele )O* interne 2per*i*tente *au te%porare5 pre*upune c6 atunci c:nd *e in*ereaz *au *e actualizeaz un obiect de tip )O*6 e*te copiat 0ntrea)a valoare )O*. A*t!el6 0n ur%a operaiei rezult doi locatori di!erii i dou copii di!erite ale valorii )O*. Acea*t aciune nu nece*it o co%and de tip S>)>C?BGO/ <3.0?>6 deoarece blocarea 0nre)i*trrii *e !ace doar atunci c:nd *e !ac %odi!icri pe poriuni. ,e%antica re!erin utilizat de obiectele )O* e7terne pre*upune c6 atunci c:nd e*te copiat un obiect *GI)> din 0nre)i*trarea unui tabel 0n alt coloan de tip *GI)>6 *e reine doar locatorul a*ociat. (entru ter)erea unei 0nre)i*trri care conine un c:%p de tip )O* *e utilizeaz co%anda .>)>?>. En ace*t !el6 *e ter)e i valoarea intern a obiectului )O*. (entru a ter)e doar in*tana )O*6 i nu 0ntrea)a 0nre)i*trare6 *e atribuie c:%pului )O* valoarea null6 irul vid *au rezultatul unei !uncii de tip >;3?@ 2>;3?@:*)O* *au >;3?@:C)O*5. En cazul unui !iier *GI)>6 !iierul a*ociat nu e*te eli%inat auto%at6 el trebuie ter* 0n %od e7plicit6 utiliz0nd co%enzi ale *i*te%ului de operare. E0e1pl27 , *e eli%ine valorile de tip )O* din tabelul tab:opere6 iar apoi * *e anuleze co%enzile.
>> se e imina intrea'a inre'istrare /E0ETE 1RO. ta#_"pere ?HERE (") A 2+% >> se e imina )"ar instante e 0OB BE75, -P/ATE ta#_"pere SET *"t" A E.PTY_B0OB(), rep"rtaB A ,-00, )es(riere A E.PTY_C0OB() ?HERE (") A 2+% E,/% & RO00BACG%

,i*te%ul Oracle a*i)ur *uport pentru !uncionalitatea nece*ar obiectelor )O* 0n opt inter!ee i preco%pilatoare *peci!ice di!eritelor li%baje i %edii de pro)ra%are e7i*tente. Ace*tea *unt prezentate 0n tabelul care ur%eaz. &edii de progra(are care suport %uncionalitatea LOB 9i(ba ?&ediu de progra(are
3)4S2) C C77 C4C77 CO*O) &isual *asic 5a6a O)>.*

.reco(pilator sau inter%a


(ac1etul prede!init .*;S:)O* Oracle Call Inter+ace pentru C 2OCI5 Oracle Call Inter+ace !or C77 2OCCI5 (reco%pilatorul 3ro9C4C77 (reco%pilatorul 3ro9CO*O) Oracle Ob"ects +or O)> 2OO4O5 5.*C 0pplication 3rogramatic Inter+ace 203I5 OraO)>.*

12, .achetul DB.S*LOB

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

(ac1etul .*;S:)O* conine *ubpro)ra%e pentru prelucrarea datelor de tip *)O*6 C)O*6 1C)O*6 *GI)> i pentru obiectele de tip )O* te%porare. (ac1etul .*;S:)O* poate !i !olo*it pentru a e!ectuaF operaii de citire *au %odi!icare6 0n 0ntre)i%e ori pe *eciuni6 a*upra obiectelor )O* interne6 at:t per*i*tente6 c:t i te%porareG operaii de citire pentru obiectele de tip *GI)>. 9utinele .*;S:)O* utilizeaz locatorii )O*. (entru *ucce*ul unei rutine .*;S:)O* trebuie !urnizat un locator valid6 di!erit de null6 care )aranteaz e7i*tena valorii )O* la invocarea rutinei. =ocatorii )O* core*punztori obiectelor *tocate pot !i *electai 0ntr@o variabil local 3)4S2). Acea*t variabil *e poate utiliza ca para%etru de intrare 0n *ubpro)ra%ele .*;S:)O* pentru acce*area valorii )O*. +tilizarea unui locator care a !o*t *etat null6 pentru a acce*a *au prelucra o valoare )O*6 va duce la apariia unei e7cepii 2I1&0)I.:0/#&0)5. (rocedurile 3)4S2) de pe %aina client 2de e7e%plu6 cele utilizate de Oracle Gorms5 nu pot acce*a rutinele .*;S:)O*. En *c1i%b6 procedurile *tocate pe ser6er *au blocurile anoni%e 3ro9C4C77 pot apela ace*te rutine. (ac1etul .*;S:)O* conine ur%toarele con*tanteF GI)>:/>0.O1)@ de tip *I10/@:I1?>#>/ 2valoarea -5G )O*:/>0.O1)@ de tip *I10/@:I1?>#>/ 2valoarea -5G )O*:/>0.A/I?> de tip *I10/@:I1?>#>/ 2valoarea 15G )O*;0DSIN> de tip I1?>#>/ 2valoarea 42$4$"72$55G C0)) de tip 3)S:I1?>#>/ 2valoarea 125G S>SSIO1 de tip 3)S:I1?>#>/ 2valoarea 1-5. 8a re)ul )eneral a rutinelor .*;S:)O*6 para%etrii de tip C)O* i 1C)O* *unt *peci!icai 0n caractere6 iar para%etrii de tip *)O* i *GI)> 0n octei. e a*e%enea6 para%etrii de tip 0ntre) care deter%in poziia *au cantitatea core*punztoare unui obiect de tip )O* *unt e7pri%ai 0n nu%r de caractere pentru 1C)O* Ti C)O*6 iar pentru *GI)> i *)O*6 0n octei. e obicei6 para%etrii care deter%in poziia 0ntr@o valoare )O* au valoarea i%plicit 1. (entru citirea *au e7a%inarea valorilor )O* interne *au e7terne6 *e pot utiliza rutinele prezentate 0n cele ce ur%eaz. /uncia CO;30/> 2lob:16 lob:26 cantitate6 po :16 po :25 co%par dou valori de tip )O* 2interne *au e7terne5. Acea*t !uncie returneaz - dac cele dou valori *unt e)ale i o valoare di!erit de zero6 0n caz contrar. ;aloarea returnat e*te null dac po :16 po :2 *au cantitate nu *unt cuprin*e 0ntre 1 i )O*;0DSIN>. /uncia #>?CE<1FSIN> 2locator5 returneaz di%en*iunea unitii !olo*ite la citireJ*criere 2per%i* doar cu valori de tip )O* interne5. /uncia #>?)>1#?E 2lob:locator5 returneaz di%en*iunea valorii de tip )O* 2intern *au e7tern5. /uncia I1S?/ 2locator6 teCt6 po 6 n5 returneaz poziia celei de@a n@a apariii a unui teCt 0ntr@o valoare de tip )O* 2intern *au e7tern56 cutarea 0ncep:nd de la poziia *peci!icat. (rocedura />0. 2locator6 cantitate6 po 6 bu++er5 citete o anu%it cantitate de date dintr@ o valoare de tip )O*6 0ncep:nd de la poziia *peci!icat 2dac *e ajun)e la *!:ritul obiectului e*te declanat eroarea 1O:.0?0:GO<1.5. /uncia S<*S?/ 2locator6 cantitate6 po 5 returneaz o poriune din valoarea de tip )O*6

Orientare pe obiecte n Oracle9i

120

0ncep:nd de la poziia *peci!icat. E0e1pl27 , *e *electeze in!or%aiile coninute 0n de*crierea operei de art av:nd codul 15. En c:%pul descriere *unt *tocate %aterialul6 anul crerii i *tilul6 0n acea*t ordine. 8aracterul de *eparare e*te HTI. e a*e%enea6 *e va li*ta lun)i%ea de*crierii i di%en*iunea unitii de citireJ*criere pentru !oto)ra!ia ataat operei.
/EC0ARE $_)es(riere C0OB% $_*"t" B0OB% $_(") ta#_"pere=(")KTYPE IA 2+% $_materia VARCHAR2(20)% $_an ,-.BER% $_sti VARCHAR2(20)% $_*ina BOO0EA,% TYPE t_ta#e 5S TAB0E O1 VARCHAR2(20) 5,/EF BY P0S_5,TE7ER% in*" t_ta#e % i P0S_5,TE7ER% p"s_in P0S_5,TE7ER% p"s_*in P0S_5,TE7ER% $_e(") ,-.BER% $_errm VARCHAR2(2+0)% BE75, SE0ECT )es(riere, *"t" 5,TO $_)es(riere, $_*"t" 1RO. ta#_"pere ?HERE (") A $_(")% /B.S_O-TP-T=P-T_05,E(6/imensiune C0OB esteI 6 CC /B.S_0OB=7ET0E,7TH($_)es(riere))% /B.S_O-TP-T=P-T_05,E(6/imensiune unitate B0OB esteI 6 CC /B.S_0OB=7ETCH-,GS5PE ($_*"t"))% $_*ina IA 1A0SE% i IA 2% p"s_in IA 0% p"s_*in IA 5,STR ($_)es(riere, 6K6, 2, i)% 0OOP 51 p"s_*in VA 0 THE, in*" (i) IA S-BSTR ($_)es(riere, P"s_in N 2, p"s_*in > p"s_in > 2)% i IA i N 2% p"s_in IA p"s_*in% p"s_*in IA 5,STR($_)es(riere, 6K6, 2, i)% E0SE $_*ina IA TR-E% E,/ 51% EF5T ?HE, $_*ina % E,/ 0OOP% 1OR i 5, in*"=15RST==in*"=0AST 0OOP /B.S_O-TP-T=P-T (in*"(i) CC6>6)% 51 i .O/ 2 A 0 THE, /B.S_O-TP-T=,E?_05,E% E,/ 51% E,/ 0OOP% EFCEPT5O,

131

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

?HE, OTHERS THE, $_e(") IA SM0CO/E% $_errm IA S-BSTR( SM0ERR., 2, 2+0)% RA5SE_APP05CAT5O,_ERROR (>20200, $_e(") CC 6>6 CC $_errm)% E,/% &

9ezultatul e7ecuiei blocului 3)4S2) anterior e*te ur%torulF

/imensiune 0OB esteI 3! /imensiune unitate B0OB esteI ;232 .ateria >0emn> An>2;+9> Sti >m")ern>

+r%toarele *ubpro)ra%e din pac1etul .*;S:)O* *unt prevzute pentru prelucrarea obiectelor )O* te%porare. (rocedura C/>0?>?>;3O/0/@ 2locator6 cache6 durata5 creeaz un obiect de tip )O* intern te%porar. ;aloarea boolean cache *peci!ic dac obiectul va !i adu* 0n zona de %e%orie cache6 iar durata e*te un cod 21- *au 125 care precizeaz durata de via a obiectului te%porar. urata poate !i *e*iunea curent 2 .*;S:)O*.S>SSIO15 *au apelul curent 2.*;S:)O*.C0))5. /uncia IS?>;3O/0/@ 2locator5 veri!ic dac un obiect )O* intern e*te obiect te%porar. En caz a!ir%ativ6 !uncia returneaz valoarea 1. (rocedura G/>>?>;3O/0/@ 2locator5 elibereaz o valoare de tip )O* te%porar. =ocatorul dat ca para%etru e*te %arcat invalid. E0e1pl27 , *e creeze i * *e iniializeze dou obiecte de tip )O* te%porare6 pentru *tocarea irurilor de caractere. , *e co%pare parial cele dou obiecte.
/EC0ARE $_temp2 C0OB% $_temp2 C0OB% $_sir VARCHAR2(20) IA 6223!+:9;<06% #u**er2 VARCHAR2(2)% #u**er2 VARCHAR2(2)% $_(ant P0S_5,TE7ER IA 2% $_e(") ,-.BER% $_errm VARCHAR2(2+0)% BE75, /B.S_0OB=CREATETE.PORARY ($_temp2, TR-E, /B.S_0OB=SESS5O,)% /B.S_0OB=CREATETE.PORARY ($_temp2, TR-E, /B.S_0OB=SESS5O,)% /B.S_0OB=?R5TE ($_temp2, 0E,7TH($_sir), 2, $_sir)% >> $_temp2 ("ntine 223!+:9;<0 /B.S_O-TP-T=P-T_05,E (/B.S_0OB=S-BSTR ($_temp2, 20))% /B.S_0OB=COPY ($_temp2, $_temp2, +, 2, +)% >> $_temp2 ("ntine +:9;< /B.S_O-TP-T=P-T_05,E (/B.S_0OB=S-BSTR ($_temp2, +))% >> se ("mpara a sase ea (ara(ter )in $_temp2 (u >> a )"i ea (ara(ter )in $_temp2 /B.S_0OB=REA/ ($_temp2, $_(ant, :, #u**er2)% /B.S_0OB=REA/ ($_temp2, $_(ant, 2, #u**er2)% /B.S_O-TP-T=P-T (6 se ("mpara (ara(teru 6 CC #u**er2

Orientare pe obiecte n Oracle9i CC 6 (u 6 CC #u**er2 CC 6 re4u tatu *iin)I6 )% /B.S_O-TP-T=P-T_05,E ( /B.S_0OB=CO.PARE ($_temp2, $_temp2, 2, :, 2))% 51 /B.S_0OB=5STE.PORARY ($_temp2) A 2 THE, /B.S_O-TP-T=P-T_05,E (6e i#erea4a spatiu "(upat )e 6CC 6 "#ie(tu temp"rar $_temp26)% /B.S_0OB=1REETE.PORARY ($_temp2)% E,/ 51% >> e i#erarea spatiu ui se p"ate *a(e si prin >> atri#uirea unei $a "ri temp"rare '"a e $_temp2 IA $_temp2% E,/%

131

(entru %odi!icarea valorilor )O* interne *e pot utiliza ur%toarele rutineF procedura 033>1. 2lob:dest6 lob:surs5 adau) coninutul unei valori de tip )O* *ur* la o valoare de*tinaieG procedura CO3@ 2lob:dest6 lob:surs6 cantitate6 po :dest6 po :surs5 per%ite copierea total *au parial a unui obiect )O* *ur* 0ntr@un obiect )O* de*tinaie 2copierea *e !ace 0ntre valori )O* de acelai tip5G procedura >/0S> 2locator6 cantitate6 po 5 ter)e total *au parial o valoare de tip )O*6 0ncep:nd cu poziia *peci!icat 2dup ter)ere di%en*iunea valorii r%:ne ne*c1i%bat6 poriunea tear* !iind co%pletat cu *paii pentru obiectele C)O* i 1C)O* *au cu null pentru obiectele *)O*5G procedura )O0.G/O;GI)> 2lob:dest6 +iTier:surs6 cantitate6 po :dest6 po :surs5 0ncarc total *au parial date de tip *GI)> 0ntr@un obiect )O* intern 2para%etrul lob:dest trebuie * !ie un locator valid5G procedura )O0.*)O*G/O;GI)> 2lob:dest6 +iTier:surs6 cantitate6 po :dest6 po :surs56 nou 0n Oracle9i6 per%ite 0ncrcarea datelor binare din !iiere ale *i*te%ului de operare 0n obiecte interne *)O*6 te%porare *au per*i*tente 2*i%ilar procedurii )O0.G/O;GI)>5G procedura )O0.C)O*G/O;GI)> 2lob:dest6 +iTier:surs6 cantitate6 po :dest6 po :surs6 set:caract:surs6 conteCt:limba"6 mesa"56 nou 0n Oracle9i6 per%ite 0ncrcarea datelor de tip ir de caractere din !iierele *i*te%ului de operare 0n obiecte C)O* *au 1C)O*6 te%porare *au per*i*tente 2conver*ia datelor de la *etul de caractere al *ur*ei la cel al bazei de date *e !ace auto%at5G procedura ?/I; 2locator6 lungime:nou5 trunc1eaz o valoare de tip )O* intern p:n la lun)i%ea *peci!icat 2*pre deo*ebire de >/0S>6 ?/I; deter%in ter)erea e!ectiv i %icorarea lun)i%ii interne a valorii re*pective5G procedura A/I?> 2locator6 cantitate6 po 6 bu++er5 *crie o anu%it cantitate de date 0ntr@un obiect )O*6 0ncep:nd de la poziia *peci!icatG procedura A/I?>033>1. 2locator6 cantitate6 bu++er5 *crie date la *!:ritul unei valori )O* interne. /unciile i procedurile utilizate 0n lucrul cu obiectele de tip *GI)> *unt ur%toareleF procedura GI)>C)OS> 2locator:+iTier5 0nc1ide !iierul *peci!icat 2*e poate !olo*i i C)OS>5G procedura GI)>C)OS>0)) 0nc1ide toate !iierele de*c1i*e la %o%entul curentG !uncia GI)>>DIS?S 2locator:+iTier5 veri!ic dac !iierul e7i*t 0n *i*te%ul de operare al ser6er@uluiG

132

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

!uncia GI)>#>?10;> 2locator:+iTier6 alias:director6 nume:+iTier5 returneaz alias@ul directorului i nu%ele !iierului pentru un *GI)>G !uncia GI)>ISO3>1 2locator:+iTier5 veri!ic dac un !iier a*ociat unui *GI)> e*te de*c1i* 2*e poate !olo*i i ISO3>15G procedura GI)>O3>1 2locator:+iTier6 mod:deschidere5 de*c1ide un !iier ataat unui *GI)> 2*e poate !olo*i i O3>15.

in anu%ite puncte de vedere6 %odalitatea de prelucrare a obiectelor )O* e*te *i%ilar !iierelor. (entru de*c1iderea obiectelor )O*6 0n vederea *crierii *au citirii6 re*pectiv pentru 0nc1iderea ace*tora *unt di*ponibile rutineleF procedura O3>1 2locator:lob6 mod:deschidere5 de*c1ide o valoare de tip )O* pentru citire *au *criereG !uncia ISO3>1 2locator:lob5 veri!ic dac o valoare de tip )O* e*te de*c1i*G procedura C)OS> 2locator:lob5 0nc1ide o valoare de tip )O*. O alt %odalitate !recvent utilizat pentru )e*tiunea i prelucrarea obiectelor de tip )O* e*te reprezentat de utilitarul Oracle Call Inter+ace VOCIH. 9utinele CO;30/>6 I1S?/6 S<*S?/ i )O0.G/O;GI)> prezente 0n pac1etul .*;S:)O*6 nu e7i*t 0n OCI. E0e1pl27 a5 , *e 0ncarce !oto)ra!ia !iecrei opere de art dintr@un !iier care are e7ten*ia "pg i acelai nu%e ca opera re*pectiv 2titlu5. , *e eli%ine din coloana descriere in!or%aiile re!eritoare la *tilul operei. ,e pre*upune c !iierele 9."pg core*punztoare *unt valide i *e a!l 0n directorul H.QUImaginiI.
CREATE OR REP0ACE /5RECTORY 5ma'ini AS 6/IX5ma'iniX6% /EC0ARE C-RSOR (_"pere 5S SE0ECT tit u, )es(riere, *"t" 1RO. stu)ent=ta#_"pere 1OR -P/ATE O1 )es(riere, *"t"% $_*isier B150E% $_# "# B0OB% $_(ant P0S_5,TE7ER IA !000% $_p"s P0S_5,TE7ER% $_ un' P0S_5,TE7ER% $_*ara_sti VARCHAR2(200)% $_e(") ,-.BER% $_errm VARCHAR2(2+0)% BE75, 1OR $_re( 5, (_"pere 0OOP /B.S_O-TP-T=P-T_05,E ($_re(=tit u CC 6=Bp'6)% $_*isier IA B150E,A.E(65ma'ini6, $_re(=tit u CC 6=Bp'6)% 51 /B.S_0OB=150E5SOPE, ($_*isier) A 2 THE, >> in(3i)e *isieru )a(a era )es(3is /B.S_0OB=150EC0OSE ($_*isier)% E,/ 51% >> )es(3i)e *isieru pentru (itire /B.S_0OB=150EOPE, ($_*isier, /B.S_0OB=150E_REA/O,0Y)% >>in(ar(a " (antitate )e )ate )in *isier in "#ie(tu # "# /B.S_0OB=0OA/1RO.150E ($_# "#, $_*isier, $_(ant)% >> in(3i)e *isieru /B.S_0OB=150EC0OSE ($_*isier)% >> e imina in*"ramtii e rea ti$ )e sti )in )es(riere

Orientare pe obiecte n Oracle9i $_p"s IA /B.S_0OB=5,STR ($_re(=)es(riere, 6KSti 6)% $_ un' IA /B.S_0OB=7ET0E,7TH ($_re(=)es(riere)% 51 $_p"s A 0 THE, $_p"s IA $_ un'% E,/ 51% $_*ara_sti IA /B.S_0OB=S-BSTR ($_re(=)es(riere, $_p"s > 2, 2)% /B.S_O-TP-T=P-T_05,E ($_*ara_sti )% -P/ATE stu)ent=ta#_"pere SET *"t" A $_# "#, )es(riere A $_*ara_sti ?HERE C-RRE,T O1 (_"pere% >> sau (u pr"(e)ura ERASE >>$_(ant IA $_ un' > $_p"s % >>/B.S_0OB=ERASE ($_re(=)es(riere, $_(ant, $_p"s > 2)% >> sau (u pr"(e)ura TR5. >>/B.S_0OB=TR5. ($_re(=)es(riere, $_(ant)% E,/ 0OOP% CO..5T% EFCEPT5O, ?HE, OTHERS THE, $_e(") IA SM0CO/E% $_errm IA S-BSTR( SM0ERR., 2, 2+0)% RA5SE_APP05CAT5O,_ERROR (>20200, $_e(") CC 6>6 CC $_errm)% E,/%

133

b5 (entru toate operele de art pentru care nu *@a a*ociat o poz 0n tabelul tab:opere6 * *e co%pleteze coloana +oto de tip *)O*6 0ncrc:nd datele din !iierul re!erit de locatorul coninut 0n coloana reporta".
/EC0ARE C-RSOR (_"pere_*ara_p"4a 5S SE0ECT rep"rtaB, *"t" 1RO. stu)ent=ta#_"pere ?HERE *"t" 5S ,-00% $_rep"rtaB B150E% $_*"t" B0OB% $_(ant P0S_5,TE7ER IA 329:9% $_p"s P0S_5,TE7ER IA 2% $_#u**er RA?(!000)% $_e(") ,-.BER% $_errm VARCHAR2(2+0)% BE75, OPE, (_"pere_*ara_p"4a% 1ETCH (_"pere_*ara_p"4a 5,TO $_rep"rtaB, $_*"t"% 51 (_"pere_*ara_p"4aK,OT1O-,/ THE, C0OSE (_"pere_*ara_p"4a% E0SE C0OSE (_"pere_*ara_p"4a% /B.S_0OB=150EOPE, ($_rep"rtaB, /B.S_0OB=150E_REA/O,0Y)% 51 /B.S_0OB=7ET0E,7TH ($_rep"rtaB) L $_(ant THE, >> se p"ate in(ar(a t"t *isieru " )ata $_(ant IA /B.S_0OB=7ET0E,7TH ($_rep"rtaB)% /B.S_0OB=REA/ ($_rep"rtaB, $_(ant, 2, $_#u**er)%

134

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

/B.S_0OB=?R5TE ($_*"t", $_(ant, 2, $_#u**er)% /B.S_0OB=150EC0OSE($_rep"rtaB)% E0SE >> tre#uie (reat un (i( u pentru in(ar(area )ate "r BE75, $_p"s IA 2% 0OOP /B.S_0OB=REA/ ($_rep"rtaB, $_(ant, $_p"s, $_#u**er)% /B.S_0OB=?R5TE ($_*"t", $_(ant, $_p"s, $_#u**er)% $_p"s IA $_p"s N $_(ant% E,/ 0OOP% EFCEPT5O, ?HE, ,O_/ATA_1O-,/ THE, >> s>a terminat *isieru /B.S_0OB=150EC0OSE ($_rep"rtaB)% E,/% E,/ 51% E,/ 51% EFCEPT5O, ?HE, OTHERS THE, $_e(") IA SM0CO/E% $_errm IA S-BSTR( SM0ERR., 2, 2+0)% RA5SE_APP05CAT5O,_ERROR (>20200, $_e(") CC 6>6 CC $_errm)% E,/%

c5 , *e creeze o procedur care co%par dou obiecte de tip *GI)> i returneaz o valoare boolean ce re!lect e)alitatea ace*tora. ,e pre*upune c directorul lo)ic dat ca para%etru e7i*t 0n *i*te%ul de operare )azd6 iar !iierele ce vor !i co%parate *unt pla*ate corect 0n ace*t director.
CREATE OR REP0ACE 1-,CT5O, ("mparare ( p_)ire(t"r VARCHAR2, p_*is2 VARCHAR2, p_*is2 VARCHAR2) RET-R, BOO0EA, AS $_*is2 B150E IA B150E,A.E (p_)ire(t"r, p_*is2)% $_*is2 B150E IA B150E,A.E (p_)ire(t"r, p_*is2)% $_re4u tat BOO0EA, IA 1A0SE% BE75, /B.S_0OB=150EOPE, ($_*is2, /B.S_0OB=150E_REA/O,0Y)% /B.S_0OB=150EOPE, ($_*is2, /B.S_0OB=150E_REA/O,0Y)% $_re4u tat IA (/B.S_0OB=CO.PARE ($_*is2, $_*is2, /B.S_0OB=7ET0E,7TH ($_*is2)) A 0)% RET-R, $_re4u tat% EFCEPT5O, ?HE, OTHERS THE, /B.S_O-TP-T=P-T_05,E (6 A aparut " er"are 6)% RET-R, $_re4u tat% E,/% &

intre e7cepiile prede!inite care pot aprea 0n lucrul cu *ubpro)ra%ele din din pac1etul .*;S:)O*6 *e enu%erF 0CC>SS:>//O/6 care indic depirea di%en*iunii %a7i%e per%i*e pentru un obiect )O* 2cod eroare 22$255G I1&0)I.:0/#&0)6 care *e*izeaz dac un ar)u%ent e*te null6 invalid *au 0n a!ara do%eniului 2cod eroare 215"-5G

Orientare pe obiecte n Oracle9i

13"

I1&0)I.:.I/>C?O/@6 care *e%naleaz dac directorul re!erit e*te invalid *au a !o*t %odi!icat 2cod eroare 222'75G 1O:.0?0:GO<1.6 care *e declaneaz 0n *ituaia 0n care6 la citire6 *e ajun)e la *!:ritul !iierului 2cod eroare 1--5G 1O>DIS?S:.I/>C?O/@6 care %arc1eaz ine7i*tena directorului re!erit 0ntr@o co%and 2cod eroare 222'55G 1O3/I&:.I/>C?O/@6 care *e%naleaz c utilizatorul nu are privile)iile nece*are a*upra directorului re!erit 2cod eroare 222'55G O3>1:?OO;01@6 care *e declaneaz dac *@a atin* nu%rul %a7i% de !iiere ce pot !i de*c1i*e 0n acelai ti%p 2cod eroare 222$-5G O3>/0?IO1:G0I)>.6 care indic eecul unei operaii a*upra unui !iier al *i*te%ului de operare 2cod eroare 222''5G <1O3>1>.:GI)>6 care *e*izeaz *ituaia 0n care o anu%it operaie nu poate !i e7ecutat a*upra unui !iier6 din cauz c ace*ta nu e*te de*c1i* 2cod eroare 222'$5.

13'

BAZE DE DATE RELAIONALE ORIENTATE PE OBIECTE

@ibliogra%ie
314 Alecu A.6 8ri*tea <.6 (ope*cu ..6 ;elce*cu =. @ 3rogramare a6ansat !n Oracle9i6 &ditura #e1nic6 %ai 2--4. 324 8odd &. /. @ .eri6abilit=- /edundanc= and Consistenc= o+ /elations Stored in )arge .ata *anLs 6 .>M 9e*earc1 report 9Q5$$6 1$ au).1$"$. 334 8odd &. /. ? 0 /elational ;odel +or )arge Shared .ata *anLs 6 8o%%unication* o! t1e A8M6 ;ol. 136 No"6 1$7-. 344 8odd &./. ? Gurther 1ormalisation o+ the .ata *ase /elational ;odel 6 ataba*e ,A*te%*6 8ourant 8o%puter ,cience ,A%po*ia ,erie* "6 (rentice Uall6 1$72. 354 8odd &./. @ /ecent In6estigations into /elational .atabase S=stems 6 (roceedin)* o! t1e ./.(6 ,tocV1ol%6 1$74. 3"4 (ope*cu .. @ ;odelarea ba elor de date6 &ditura #e1nic6 2--1. 374 (opovici6 .M.6(opovici6..M.6#ana*e6.. @ C77 ?ehnologie orientata pe obiecte. 0plicatii6 &d.#eora6 1$$". 3'4 ,outou 8. @ .e <;) W S2) Conception de bases de donnXes6 &Arolle*6 2--2. 3$4 ,outou 8. @ Ob"et8relationnel sous Oracle,- ;odelisation a6ec<;) 6 &Arolle*6 1$$$. 31-4 999 ? Oracle9i 0pplication .e6eloperJs #uide Y )arge Ob"ects V)O*sH /elease 2 V9.2H8 Oracle Corporation8 2112. 3114 999 ? Oracle9i 0pplication .e6eloperJs #uide 8 Ob"ect8/elational Geatures /elease 2 V9.2H8 Oracle Corporation8 2112. 999 ? Oracle9i .atabase Concepts /elease 2 V9.2H8 Oracle Corporation8 2112.