VARRAY er en forkortelse af en variabel array. En VARRAY gemmer elementer af samme type, i den orden de er indsat. Antallet af elementer skal kendes ved oprettelse.

Med andre ord har et VARRAY, faste rammer for øvre samt nedre grænser. Når et VARRAY er oprettet kan det tilgåes via et numerisk index, som man også kender det fra andre programmering sprog.

Følgende udtryk opretter og befolker, et VARRAY der indeholder 4 elementer af samme type som kolonnen record_name i tabellen records:

DECLARE
    TYPE records IS VARRAY(4) OF records.record_name%TYPE;
    _genres records;
BEGIN
    _genres := records('ROCK','POP', 'WESTERN','SWING');
END;

Records typen kunne godt have været erklæret som VARCHAR(20), men læg mærke til jeg bruger %TYPE, det er altid en god ide, da %TYPE tiltager kolonne typen, i pågældende database tabel, som den ser ud nu. Med andre ord skulle database grundlaget ændre sig fra f.eks VARCHAR(20) til VARCHAR(35), skal du ikke ændre nogensteder i din kode pga. %TYPE.

Et VARRAY er ideelt til at gemme værdier med fast størrelse der behandles som mængde. Hvis dit behov er at kunne gemme samlinger/collections i databasen, men samtidigt vil kunne have flexibilitet til at manipulerere ved enkelt elementer, er NESTED TABLES en bedre løsning.

Alle PLSQL collections, indeholder et sæt indbyggede metoder som man kan benytte i arbejdet med disse typer. 

Metode Udførsel
COUNT Retuner antal elementer i en samling
EXISTS Retunerer Boolean sand hvis elementet udfra specificerede index findes ellers falsk
EXTEND Udvider en samling med 1 eller antal angivet EXTEND(n)
**Kan ikke benyttes med Associative Array
FIRST Naviger til første element i samlingen
LAST Naviger til sidste element i samlingen
PRIOR Naviger til forgående element i samlingen
NEXT Naviger til næste element i samlingen
TRIM Fjerner sidste element, eller antal elementer angivet TRIM(n)
**Kan ikke benyttes med Associative Array
DELETE Sletter alle elementer i en samling, eller det element der angives, hvis parameteren er specificeret

Nedenstående er; Dictionary data information, definition samt eksempler på brugen af VARRAY's m.v. Det er simpelthen den praktiske del vedr. VARRAY's.

"VARRAY er en forkortelse af en variabel array"
Data Dictionary Objekter col$
tab$
dba_source all_source user_source
dba_types all_types user_types
dba_tables all_tables user_tables
dba_tab_columns all_tab_columns user_tab_columns
dba_nested_tables all_nested_tables user_nested_tables
System Priviledger CREATE TYPE
CREATE ANY TYPE
DROP ANY TYPE
 
Definering af objekt som TYPE CREATE OR REPLACE TYPE Record AS OBJECT (
record_no NUMBER(2),
title      VARCHAR2(35),
cost       NUMBER(7,2));
/

desc record

SELECT type_name, typecode, instantiable
FROM user_types;
Definering af VARRAY som objekt type 

CREATE OR REPLACE TYPE RecordList AS VARRAY(50) OF Record;
/

desc recordlist

SELECT type_name, typecode, instantiable
FROM user_types;

Tabel oprettelse på baggrund af VARRAY  CREATE TABLE genres (
genre_id  NUMBER(2),
name     VARCHAR2(15),
budget   NUMBER(11,2),
records RecordList);

desc genres

set describe depth all linenum on indent on

desc genres;
Indsættelse af data i en VARRAY

INSERT INTO genres
VALUES(60, 'ROCK', 975,
RecordList (Record(1, 'Aguilera Christina', 75),
Record(2, 'Bowie David', 125),
Record(3, 'Degraw Gavin', 125),
Record(4, 'Dickow Tina', 78)));

SELECT * FROM genres;

Sletning af data i en VARRAY

DELETE FROM genres WHERE genre_id = 2;

SELECT * FROM genres;