Colectii

Sunt seturi de date care pot fi  tratate ca  parte a unei singure înregistrari  dintr-un tabel. Exista doua astfel de tipuri de date:
- vectori cu marime variabila (varying arrays)
- tabele încapsulate (nested tables).
 
Un vector  de marime variabila reprezinta  o  multime ordonata  de elemente de date. Toate elementele unui vector vor fi de acelasi tip (unul din tipurile scalare sau un tip abstract). Fiecare element are un index, care este  numarul ce corespunde  pozitiei  elementului în vector.
Se declara astfel:
CREATE OR REPLACE  TYPE numetip AS  VARRAY (n) OF tip_elemente;
Dimensiunea vectorului (n) este data de numarul maxim al elementelor sale.
Declararea unui vector nu presupune  implicit si alocarea spatiului pe disc. Se defineste un tip de date ce poate fi utilizat ca:
-tip de  data pentru o coloana a unui tabel relational,
-tipul atributului unui obiect
-o variabila PL/SQL, un parametru sau  tipul  rezultatului întors de o functie.
Exemplu1
O limita  a acestui tip de colectie este data de imposibilitatea  adaugarii sau  actualizarii  valorilor din vector, altfel decât prin înlocuirea  întregului vector  cu altul nou.
Exemplu 2
 
Tabelele încapsulate reprezinta un tip de colectie care poate stoca un numar nelmitat de elemente si  ofera posibilitatea actualizarii directe a unui anumit element. Presupune existenta unui  tabel sub forma  unui atribut al unui alt tabel. Se declara astfel:
CREATE OR REPLACE TYPE  numetip AS TABLE OF tip_elemente
Exemplu 3
Pentru adaugarea  unor înregistrari noi în tabelul  departamente se va folosi notatia:
NumeTipTabelIncapsulat (NumeTipElement (valAtrib1, valatrib2,…))
Exemplu 4