You are on page 1of 38

CURS 5

Componenta obiect relaional in Oracle (II) Colecii

M. Danubianu - Teoria si implementarea bazelor de date

Colecii
Se folosesc pentru modelarea legturilor 1:N
Vectori Tabele ncapsulate

La crearea unui tip colecie nu se aloc spaiu, ci doar se definete un tip de dat care poate fi folosit ca:
tipul datei dintr-o coloan a unui tabel relaional atribut pentru un tip obiect tipul unei variabile PL/SQL, ca parametru sau ca valoare returnat de o funcie

M. Danubianu - Teoria si implementarea bazelor de date

Date de tip vector - array


Un vector este o mulime ordonat de elemente, de acelai tip. Fiecare element are un index ce corespunde poziiei elementului in vector Numrul elementelor reprezint dimensiunea vectorului.
Oracle permite ca vectorii sa aib dimensiuni variabile varrays. La declararea tipului array trebuie specificat dimensiunea maxima pe care o poate avea un vector.

In mod obinuit, un vector este stocat n linie, si ca urmare, n acelai tablespace ca celelalte date din rndul sau. Dac este suficient de mare, Oracle l memoreaz ca BLOB. Un vector nu poate conine date de tip LOB. Aceasta nseamn ca un vector nu poate conine elemente ale unui tip de data definit de utilizator care are un atribut de tip LOB.
M. Danubianu - Teoria si implementarea bazelor de date 3

Exemplu

M. Danubianu - Teoria si implementarea bazelor de date

Tabele ncapsulate (nested tables)


Un tabel ncapsulat este o mulime neordonat de elemente , toate de acelai tip. Are o singur coloan i tipul acesteia este un tip predefinit sau un tip obiect.
n ultimul caz tabelul poate fi vzut ca un tabel multicoloan, cte o coloan pentru fiecare atribut al tipului obiect..

Cnd o coloan dintr-un tabel relaional este de tip nested table, Oracle memoreaz datele din tabelul ncapsulat pentru toate rndurile tabelului relaional n acelai tabel. Similar cu obiectul tabel creat pe un tip de dat care are un atribut de tip nested table, Oracle memoreaz datele din tabelul ncapsulat pentru toate instanele obiectului ntr-un singur tabel asociat cu obiectul tabel care conine datele.

M. Danubianu - Teoria si implementarea bazelor de date

Exemplu nregistrarea comenzilor unei/ctre o firm


Formular comand

Tabel comenzi

Ce soluii avem ????


M. Danubianu - Teoria si implementarea bazelor de date 6

Exemplu nregistrarea comenzilor unei/ctre o firm


Formular comand Tip de dat linie_art

Obiect tabel de tipul linie_art

M. Danubianu - Teoria si implementarea bazelor de date

Exemplu nregistrarea comenzilor unei/ctre o firm


Tabel comenzi

M. Danubianu - Teoria si implementarea bazelor de date

M. Danubianu - Teoria si implementarea bazelor de date

Colecii pe mai multe nivele


Tipurile colecie multinivel sunt tipuri colecie ale cror elemente sunt ele nsele direct sau indirect alte tipuri colecie. Cazuri posibile:
Tabel ncapsulat de tip tabel ncapsulat Tabel ncapsulat de tip vector variabil Vector variabil de tip tabel ncapsulat Vector variabil de tip vector variabil Tabel ncapsulat sau vector variabil de tip definit de utilizator care are un atribut care este de tip tabel ncapsulat sau vector variabil

Ca i tipurile colecie pe un singur nivel tipurile de colecii multi-nivel pot fi utilizate ca i coloane ntr-un tabel relaional sau ca i atribute obiect ntr-un obiect tabel.
M. Danubianu - Teoria si implementarea bazelor de date 10

Exemplu
Se creeaz un tip de colecie multinivel care este reprezentat de un tabel ncapsulat de tabele ncapsulate Se modeleaz un sistem stelar n care fiecare stea are o colecie de planete care se rotesc n jurul su( tabel ncapsulat ) i fiecare planet are o serie de satelii stocai ntr-un tabel ncapsulat.

M. Danubianu - Teoria si implementarea bazelor de date

11

M. Danubianu - Teoria si implementarea bazelor de date

12

Stocarea tabelelor ncapsulate


Un atribut (aparinnd unui obiect tabel) sau o coloan de tip tabel ncapsulat necesit un tabel (storage table) care stocheaz rndurile aparinnd tuturor tabelelor din coloan. Similar unei colecii multinivel, de tabele ncapsulate n tabele ncapsulate, mulimea interioar de tabele solicit un tabel de stocare ca i mulimea exterioar.
Acesta poate fi specificat prin adugarea unei clauze suplimentare pentru stocarea tabelului ncapsulat.
M. Danubianu - Teoria si implementarea bazelor de date 13

Stocarea tabelelor ncapsulate

Oracle stocheaz rndurile unui tabel ncapsulat ntr-un tabel separat. Sistemul genereaz un cmp NESTED_TABLE_ID, pe 16 octei care coreleaz rndurile printe cu rndurile corespondente din tabelul de stocare.

M. Danubianu - Teoria si implementarea bazelor de date

14

Tabele ncapsulate stocate n tabele indexate (IOT- Index-Organized Table )


Dac un tabel ncapsulat are o cheie primar, atunci acesta poate fi organizat ca un tabel indexat (IOTindex-organized table). Dac coloana NESTED_TABLE_ID este prefix al cheii primare pentru un rnd al tabelului printe, Oracle grupeaz fiyic rndurile copil. Deci cnd este accesat un rnd printe pot fi regsite eficient toate rndurile copil asociate. Chiar dac se acceseaz numai rndurile printe eficiena este crescut deoarece acestea nu sunt inter-mixate cu rndurile copil.

M. Danubianu - Teoria si implementarea bazelor de date

15

Tabele n care sunt stocate tabele ncapsulate- Exemplu 1


Se creaz un tabel Stele care conine o coloana planets al crui tip este o colecie multinivel (un tabel ncapsulat al crui tip are un atribut satellites de tip tabel ncapsulat).
Se furnizeaz clauze de stocare separate att pentru tabelul ncapsulat exterior planete ct i pentru cel interior satelit.

In acest caz se poate referi tabelul interior satellite prin nume deoarece acest tabel este un atribut cu nume ntr-un obiect.
M. Danubianu - Teoria si implementarea bazelor de date 16

Tabele n care sunt stocate tabele ncapsulate- Exemplu 2


Daca tabelul ncapsulat interior nu este atribut el nu are nume. In acest caz exist cuvntul cheie COLUMN_VALUE care se poate folosi n locul numelui unui tabel ncapsulat interior.

M. Danubianu - Teoria si implementarea bazelor de date

17

Stocarea datelor multinivel de tip varray


Exist dou posibiliti de stocare funcie de tipul coleciei multinivel:
1. Vector de vectori variabili 2. Vector de tabele ncapsulate.

1. Intregul vector este stocat n linie dac acesta nu este prea mare (pn n 4000 octei) sau dac nu este specificat explicit opiunea de stocare LOB 2. ntregul vector este stocat ntr-un LOB si n rnd se stocheaz numai locatorul pentru LOB
1. Nu exist tabele de stocare asociate cu elementele de tabel ncapsulat al unui vector. 2. Intreaga colecie este memorata n interiorul vectorului.

Se poate specifica explicit opiunea de stocare LOB pentru vectori variabili.

M. Danubianu - Teoria si implementarea bazelor de date

18

Stocarea datelor multinivel de tip varray


Se consider cazul elementelor varray ale unui tabel ncapsulat. Se prezint modul de utilizare al cuvntului cheie COLUMN_VALUE mpreuna cu tipul varray.

M. Danubianu - Teoria si implementarea bazelor de date

19

Stocarea datelor multinivel de tip varray


n exemplu se arat modul de specificare explicit ca stocare LOB pentru un vector de vectori variabili:

M. Danubianu - Teoria si implementarea bazelor de date

20

Crearea obiectelor VARRAY sau Nested Table


Instana unui tip colecie se creeaz n acelai mod ca instana oricrui alt tip obiect, si anume, prin apelarea metodei constructor corespunztoare
numele acesteia este chiar numele tipului Elementele coleciei se dau ca o list de argumente, separate prin virgul, pentru metoda apelat

Apelarea unui constructor cu o list vid de argumente creeaz o colecie vid (empty collection) de tipul respectiv.
O colecie vid este o colecie care (posibil din ntmplare) n prezent este goal. NU are aceeai semnificaie cu o colecie null .

M. Danubianu - Teoria si implementarea bazelor de date

21

Constructori pentru colecii multinivel


Tipurile de colecii multinivel sunt create prin apelarea metodei constructor aferent tipului
Constructorul unui tip de colecie multinivel este o funcie definita de sistem care are acelai nume cu tipul respectiv i ntoarce o instan nou a acestuia. Parametrii transmii constructorului au numele i tipurile corespunztoare tipurilor atributelor obiectului.

Exemplu: colecie de tip tabel ncapsulat de tabele ncapsulate


Constructorul pentru tabelul ncapsulat exterior apeleaz constructorul planet_t pentru fiecare planeta ce se creeaz Constructorul fiecrei planete apeleaz constructorul pentru tabelul ncapsulat satellites pentru a crea tabelul satelittes Constructorul tipului satellites (tabel ncapsulat) apeleaz constructorul satellite_t pentru a crea instane pentru fiecare satelit

M. Danubianu - Teoria si implementarea bazelor de date

22

M. Danubianu - Teoria si implementarea bazelor de date

23

Executarea operaiilor DML asupra datelor de tip colecie


Oracle suport urmtoarele tipuri de operaii asupra coloanelor care conin tabele ncapsulate:
Inserri i actualizri care furnizeaz o valoare nou pentru ntreaga colecie Actualizri pe componente
Inserarea de noi elemente n colecie tergerea de elemente din colecie Actualizarea elementelor coleciei

Pentru actualizarea coloanelor tabelelor ncapsulate instruciunile DML identific tabelul ncapsulat asupra cruia se opereaz prin utilizarea expresiei TABLE

NU SUPORT actualizri pariale pe coloane de tip varray


M. Danubianu - Teoria si implementarea bazelor de date 24

Exemplu operaii pariale asupra coloanelor de tip tabel ncapsulat - INSERARE


s-au inserat date in tabelul tabel_comanda care conine un tabel ncapsulat de tip linie_art

S-a fcut o inserare in tabelul ncapsulat aferent rndului cu nr=5

M. Danubianu - Teoria si implementarea bazelor de date

25

Rezultatul :

M. Danubianu - Teoria si implementarea bazelor de date

26

Exemplu operaii pariale asupra coloanelor de tip tabel ncapsulat - ACTUALIZARE

M. Danubianu - Teoria si implementarea bazelor de date

27

M. Danubianu - Teoria si implementarea bazelor de date

28

Exemplu operaii pariale asupra coloanelor de tip tabel ncapsulat - TERGERE

M. Danubianu - Teoria si implementarea bazelor de date

29

M. Danubianu - Teoria si implementarea bazelor de date

30

Operaii DML asupra coleciilor multinivel


Pentru coleciile multinivel de tabele ncapsulate operaiile pot fi realizate atomic, asupra coleciei vzute ca un ntreg sau pe buci asupra elementelor selectate Pentru coleciile multinivel de tip varray operaiile DML pot fi executate numai atomic.
M. Danubianu - Teoria si implementarea bazelor de date 31

Exemplu 1

M. Danubianu - Teoria si implementarea bazelor de date

32

Exemplu 2- inserare n tabelul interior

M. Danubianu - Teoria si implementarea bazelor de date

33

Interogarea coleciilor
Exist dou modaliti de a interoga un tabel care conine un atribut sau o coloan de tip colecie
Colecia poate fi returnat nglobat n rndul rezultat care o conine (nested collection) Colecia este distribuit (unnested) astfel nct fiecare element apare separat n rndul rezultat

M. Danubianu - Teoria si implementarea bazelor de date

34

Interogri care ntorc rezultatul nglobat


1. Select * from stele; 2.

M. Danubianu - Teoria si implementarea bazelor de date

35

Interogri care ntorc rezultate detaliat pe elemente (unnested)

M. Danubianu - Teoria si implementarea bazelor de date

36

Restricii referitoare la utilizarea subinterogrilor ntr-o expresie TABLE


Subinterogarea trebuie s ntoarc un tip colecie Lista SELECT a subinterogrii trebuie s conin exact un articol Subinterogarea trebuie s ntoarc numai o singur colecie (nu poate ntoarce colecii pentru mai multe rnduri)
M. Danubianu - Teoria si implementarea bazelor de date 37

Interogarea coleciilor multinivel


Se folosesc doar interogri care ntorc rezultate detaliate Se pot utiliza att pentru vectori variabili ct i pentru tabele ncapsulate

M. Danubianu - Teoria si implementarea bazelor de date

38