Les collections imbriquées (LDD)
Syntaxe : Implémentation des collections de scalaires sous forme de tables imbriquées en SQL3
1
-- Déclaration d'un type abstrait de collection
2
CREATE TYPE liste_nom_type AS TABLE OF nom_type_scalaire;
3
4
-- Déclaration d'une table imbriquant une autre table
5
CREATE TABLE nom_table_principale (
6
nom_attribut type_attribut,
7
...
8
nom_attribut_table_imbriquée liste_nom_type,
9
...
10
)
11
NESTED TABLE nom_attribut_table_imbriquée STORE AS nom_table_stockage;
Exemple : Gestion d'attribut multivalué par imbrication de collection de scalaires
1
CREATE OR REPLACE TYPE typListeTelephones AS TABLE OF number(10);
2
/
3
4
CREATE TABLE tIntervenant (
5
pknom varchar2(20) PRIMARY KEY,
6
prenom varchar2(20) NOT NULL,
7
ltelephones typListeTelephones
8
)
9
NESTED TABLE ltelephones STORE AS tIntervenant_nt1;
Syntaxe : Implémentation des collections d'enregistrement sous forme de tables imbriquées en SQL3
1
--Création d'un type abstrait d'objet
2
CREATE TYPE nom_type AS OBJECT (...);
3
4
-- Déclaration d'un type abstrait de collection
5
CREATE TYPE liste_nom_type AS TABLE OF nom_type;
6
7
-- Déclaration d'une table imbriquant une autre table
8
CREATE TABLE nom_table_principale (
9
nom_attribut type_attribut,
10
...
11
nom_attribut_table_imbriquée liste_nom_type,
12
...
13
)
14
NESTED TABLE nom_attribut_table_imbriquée STORE AS nom_table_stockage;
Exemple : Gestion de composition par imbrication de collection d'enregistrements
1
CREATE OR REPLACE TYPE typSpecialite AS OBJECT (
2
domaine varchar2(50),
3
technologie varchar2(50)
4
);
5
/
6
7
CREATE OR REPLACE TYPE typListeSpecialites AS TABLE OF typSpecialite;
8
/
9
10
CREATE TABLE tIntervenant (
11
pknom varchar2(20) PRIMARY KEY,
12
prenom varchar2(20) NOT NULL,
13
lspecialites typListeSpecialites
14
)
15
NESTED TABLE lspecialites STORE AS tIntervenant_nt2;
Complément : Synthèse : enregistrement imbriqué, collection de scalaires imbriquée, collection d'enregistrement imbriquée
1
Type typBureau : <centre:char, batiment:char, numero:int>
2
Type typListeTelephones : collection de <entier>
3
Type typSpecialite : <domaine:char, specialite:char>
4
Type typListeSpecialites : collection de <typSpecialite>
5
tIntervenant (#nom:char, prenom:char, bureau:typBureau, ltelephones:typListeTelephones, lspecialites:typListeSpecialites)
1
CREATE OR REPLACE TYPE typBureau AS OBJECT (
2
centre char(2),
3
batiment char(1),
4
numero number(3)
5
);
6
/
7
8
CREATE OR REPLACE TYPE typListeTelephones AS TABLE OF number(10);
9
/
10
11
CREATE OR REPLACE TYPE typSpecialite AS OBJECT (
12
domaine varchar2(15),
13
technologie varchar2(15)
14
);
15
/
16
17
CREATE OR REPLACE TYPE typListeSpecialites AS TABLE OF typSpecialite;
18
/
19
20
CREATE TABLE tIntervenant (
21
pknom varchar2(20) PRIMARY KEY,
22
prenom varchar2(20) NOT NULL,
23
bureau typBureau,
24
ltelephones typListeTelephones,
25
lspecialites typListeSpecialites
26
)
27
NESTED TABLE ltelephones STORE AS tIntervenant_nt1,
28
NESTED TABLE lspecialites STORE AS tIntervenant_nt2;