En samling er en ordnet gruppe av elementer som har samme datatype. Hvert element er identifisert av en unik indeks som representerer sin posisjon i samlingen. 
 
 PL /SQL gir tre innsamlingstyper: 
 
 
 Index-by tabeller eller assosiativ array 
 
 
 nestet tabell 
 
 
 Variable-size matrise eller Varray 
 
 Oracle dokumentasjon gir følgende egenskaper for hver type samlinger: 
 Collection Type 
 
assosiative array (eller indeks ved bordet) UnboundedString eller integerEitherOnly i PL /SQL blockNoNested tableUnboundedIntegerStarts tette, kan bli sparseEither i PL /SQL blokk eller på skjema levelYesVariable-size array (Varray) BoundedIntegerAlways denseEither i PL /SQL blokk eller på skjema levelYes
 Vi har allerede diskutert varray i kapitlet ' PL /SQL arrays ". I dette kapittelet vil vi diskutere PL /SQL-tabeller. 
 
 Begge typer PL /SQL-tabeller, dvs. indeksen ved tabeller og nestede tabeller har samme struktur og deres rekker du får tilgang til ved å bruke senket notasjon. Men disse to typer tabeller forskjellige i ett aspekt; de nestede tabeller kan lagres i en database kolonne og indeksen ved tabeller kan ikke. 
 
 Index-By Table 
 
  indeks av 
 tabell (også kalt en assosiativ array) er et sett med  nøkkelverdien 
 parene. Hver tast er unik, og brukes til å finne den tilsvarende verdi. Nøkkelen kan enten være et heltall eller en streng. 
 
 En indeks-by bordet er opprettet ved hjelp av følgende syntaks. Her skaper vi en indeks-by tabell med navnet  table_name 
 hvis nøklene vil være av  subscript_type Hotell og tilknyttede verdiene vil være av  ELEMENT_TYPE 
 TYPE TYPE_NAME er bord AV ELEMENT_TYPE [NOT NULL] indeksen med subscript_type; table_name TYPE_NAME; 
 Eksempel: 
 
Følgende eksempel viser hvordan du oppretter en tabell for å lagre heltallsverdiene sammen med navn og senere skriver den samme listen med navn <. br> ERKLÆRER TYPE lønn ER FORTEGN NUMMER indeksen med VARCHAR2 (20); salary_list lønn; nevne VARCHAR2 (20), BEGIN - legge til elementer til bordet salary_list ('Rajnish'): = 62000; salary_list ('Minakshi'): = 75000; salary_list ('Martin'): = 100000; salary_list ('James'): = 78000; - Utskrift tabellnavnet: = salary_list.FIRST; MENS navn ikke er null LOOP dbms_output.put_line ('Lønn fra' || navn || 'er' || TO_CHAR (salary_list (navn))); name: = salary_list.NEXT (navn); END LOOP; END; /
 Når ovenfor koden kjøres på SQL teksten, gir det følgende resultat: 
 Lønn fra Rajnish er 62000Salary av Minakshi er 75000Salary av Martin er 100000Salary av James er 78000PL /SQL-prosedyren ble fullført . 
 Eksempel: 
 
 Elementer i en indeks-by bord kan også være en% ROWTYPE av noen databasetabell eller% TYPE av noen databasetabell feltet. Det følgende eksempel illustrerer konseptet. Vi vil bruke KUNDER tabell lagret i vår database som: 
 Velg * fra kunder; + ---- + ---------- + ----- + ------- ---- + ---------- + | ID | NAME | AGE | ADRESSE | LØNN | + ---- + ---------- + ----- + ----------- + ---------- + | 1 | Ramesh | 32 | Ahmedabad | 2000.00 || 2 | Khilan | 25 | Delhi | 1500.00 || 3 | Kaushik | 23 | Kota | 2000.00 || 4 | Chaitali | 25 | Mumbai | 6500.00 || 5 | Hardik | 27 | Bhopal | 8500.00 || 6 | Komal | 22 | MP | 4500.00 | + ---- + ---------- + ----- + ----------- + ---------- + ERKLÆRER CURSOR c_customers er å velge navn fra kunder; TYPE c_list ER TABLE av customers.name% typen indeksen med binary_integer; NAME_LIST c_list; teller heltall: = 0; BEGIN for N i c_customers LOOP teller: = teller 1; NAME_LIST (counter): = n.name; dbms_output.put_line ('Customer (' || teller || '):' || NAME_LIST (counter)); END LOOP; END; /
 Når ovenfor koden kjøres på SQL teksten, gir det følgende resultat: 
 Customer (1): Ramesh Kunde (2): Khilan Customer (3): Kaushik Customer (4) : Chaitali Customer (5): Hardik Customer (6): KomalPL /SQL-prosedyren ble fullført 
 nestede tabeller 
 
 En  nestet tabell 
 er som en endimensjonal matrise med et vilkårlig antall av elementer. Imidlertid skiller en nestet tabell fra en matrise i følgende aspekter: 
 
 
 En matrise har en erklært antall elementer, men en nestet tabell ikke. Størrelsen på en nestet tabell kan øke dynamisk. 
 
 En rekke er alltid tett, dvs. den alltid har gjort sammenhengende senket. En nestet matrise er tett i utgangspunktet, men det kan bli sparsom når elementene blir slettet fra det 
 
 En  nestet tabell 
 er opprettet ved hjelp av følgende syntaks:. 
 TYPE TYPE_NAME ER FORTEGN ELEMENT_TYPE [NOT NULL]; table_name TYPE_NAME; 
 Denne erklæringen er lik erklæring om en  indeks av 
 bord, men det er ingen INDEX BY klausulen 
 
. En nestet tabell kan lagres i en database kolonne og slik at den kan brukes for å forenkle SQL operasjoner hvor en tabell enkelt kolonne med en større tabell du delta. En assosiativ array kan ikke lagres i databasen 
 
 Eksempel: 
 
 Følgende eksempler illustrerer bruk av nestet tabell. 
 ERKLÆRER TYPE names_table ER FORTEGN VARCHAR2 (10); TYPE karakterer ER FORTEGN INTEGER; Navnene names_table; markerer karakterer; total heltall; BEGIN navn: = names_table ('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); merker: = karakterer (98, 97, 78, 87, 92); Totalt: = names.count; dbms_output.put_line ('Total' || total || 'Students'); For jeg IN 1 .. total LOOP dbms_output.put_line ('Student:' || navn (i) || ', Marks:' || merker (i)); end sløyfe, END; /
 Når ovenfor koden kjøres på SQL teksten, gir det følgende resultat: 
 Totalt fem StudentsStudent: Kavita, Marks: 98Student: Pritam, Marks: 97Student: Ayan, Marks: 78Student: Rishav, Marks: 87Student: Aziz, Marks. 92PL /SQL-prosedyren ble fullført 
 Eksempel: 
 
 Elementer av en  nestet tabell 
 kan også være en% ROWTYPE av noen databasetabell eller % TYPE av noen databasetabell feltet. Det følgende eksempel illustrerer konseptet. Vi vil bruke KUNDER tabell lagret i vår database som: 
 Velg * fra kunder; + ---- + ---------- + ----- + ------- ---- + ---------- + | ID | NAME | AGE | ADRESSE | LØNN | + ---- + ---------- + ----- + ----------- + ---------- + | 1 | Ramesh | 32 | Ahmedabad | 2000.00 || 2 | Khilan | 25 | Delhi | 1500.00 || 3 | Kaushik | 23 | Kota | 2000.00 || 4 | Chaitali | 25 | Mumbai | 6500.00 || 5 | Hardik | 27 | Bhopal | 8500.00 || 6 | Komal | 22 | MP | 4500.00 | + ---- + ---------- + ----- + ----------- + ---------- + ERKLÆRER CURSOR c_customers er SELECT navn FROM kunder; TYPE c_list ER TABLE av customers.name% type; NAME_LIST c_list: = c_list (); teller heltall: = 0; BEGIN for N i c_customers LOOP teller: = teller 1; name_list.extend; NAME_LIST (counter): = n.name; dbms_output.put_line ('Customer (' || teller || '):' || NAME_LIST (counter)); END LOOP; END; /
 Når ovenfor koden kjøres på SQL teksten, gir det følgende resultat: 
 Customer (1): Ramesh Kunde (2): Khilan Customer (3): Kaushik Customer (4) : Chaitali Customer (5): Hardik Customer (6). KomalPL /SQL-prosedyren ble fullført 
 Samling Metoder 
 
 PL /SQL gir den innebygde samling metoder som gjør samlingene enklere å bruke. Tabellen nedenfor viser de metoder og deres formål: 
 S.N. 
 
en EXISTS (n)
Returnerer TRUE hvis n'te element i en samling som finnes; ellers returnerer FALSE.2 COUNT
Returnerer antall elementer som en samling for tiden contains.3 LIMIT
Kontrollerer den maksimale størrelsen på en innsamlingstidpunktet.4 FIRST
Returnerer de første (minste) indeksnumre i en samling som bruker heltall subscripts.5 LAST
returnerer den siste (største) indeksnumre i en samling som bruker heltall subscripts.6 FØR (n)
Returnerer indeksnummeret som står foran indeksen n i en collection.7 NEXT (n)
Returnerer indeksnummeret som lykkes index n.8 < b> EXTEND
Legger man null element til en collection.9 EXTEND (n)
Legger n null elementer til en collection.10 EXTEND (n, i)
Legger n kopier av ed element til en collection.11 TRIM
Fjerner ett element fra slutten av en collection.12 TRIM (n)
Fjerner n elementer fra slutten av en collection.13 DELETE
Fjerner alle elementer fra en samling, sette telle til 0,14 Slett (n)
Fjerner n'te element fra en assosiativ array med en talltast eller en nestet tabell. Dersom det assosierende matrisen har en streng nøkkel, blir det element som svarer til den nøkkelverdi slettet. Hvis n er null, DELETE (n) gjør nothing.15 DELETE (m, n)
Fjerner alle elementene i serien m..n fra en assosiativ array eller nestet tabell. Hvis m er større enn n eller hvis m eller n er null, DELETE (m, n) gjør ingenting
Samling Unntak
 I tabellen nedenfor samlingen unntak, og når de er hevet. 
 Samlingen Unntak 
 
COLLECTION_IS_NULLYou prøve å operere på en atomically null collection.NO_DATA_FOUNDA senket angir et element som ble slettet, eller en ikke-eksisterende element i en assosiativ array.SUBSCRIPT_BEYOND_COUNTA senket stiger antall elementer i en collection.SUBSCRIPT_OUTSIDE_LIMITA senket er utenfor det tillatte range.VALUE_ERRORA senket er null eller ikke konverteres til nøkkeltype. Dette unntaket kan oppstå hvis nøkkelen er definert som en PLS_INTEGER rekkevidde, og indeksen er utenfor dette området.

