Sélection dans les collections imbriquées
Syntaxe : Accès aux tables imbriquées
Soit col
un attribut de la table t
contenant une collection imbriquée.
1
SELECT t2.*
2
FROM t t1, TABLE(t1.col) t2;
Attention : Jointure avec la table imbriquée
La jointure entre la table principale et sa table imbriquée est implicitement réalisée, il ne faut pas la spécifier.
Exemple : Accès à une collection imbriquée de scalaires
1
SELECT i.pknom, t.*
2
FROM tIntervenant i, TABLE(i.ltelephones) t
3
1
PKNOM COLUMN_VALUE
2
-------------------- ------------
3
Crozat 687990000
4
Crozat 912345678
5
Crozat 344231234
6
Vincent 344231235
7
Vincent 687990001
Exemple : Accès à une collection imbriquée d'enregistrement
1
SELECT i.pknom, s.*
2
FROM tIntervenant i, TABLE(i.lspecialites) s
1
PKNOM DOMAINE TECHNOLOGIE
2
-------------------- --------------- ---------------
3
Crozat BD SGBDR
4
Crozat Doc XML
5
Crozat BD SGBDRO
6
Vincent IC Ontologies
7
Vincent BD SGBDRO
Syntaxe : Accès aux colonnes d'une table imbriquée
1
SELECT t2.a, t2.b...
2
FROM t t1, TABLE(t1.col) t2;
Syntaxe : Accès à la colonne d'une table imbriquée de scalaires
Lorsque la table imbriquée est une table de type scalaire (et non une table d'objets d'un type utilisateur), alors la colonne de cette table n'a pas de nom
(puisque le type est scalaire la table n'a qu'une colonne). Pour accéder à cette colonne, il faut utiliser une syntaxe dédiée : COLUMN_VALUE
.
1
SELECT t2.COLUMN_VALUE
2
FROM t t1, TABLE(t1.nt) t2;
Exemple :
1
SELECT i.pknom, t.COLUMN_VALUE, s.domaine
2
FROM tIntervenant i, TABLE(i.ltelephones) t, TABLE(i.lspecialites) s
1
PKNOM COLUMN_VALUE DOMAINE
2
-------------------- ------------ -----------
3
Crozat 687990000 BD
4
Crozat 687990000 Doc
5
Crozat 687990000 BD
6
Crozat 912345678 BD
7
Crozat 912345678 Doc
8
Crozat 912345678 BD
9
Crozat 344231234 BD
10
Crozat 344231234 Doc
11
Crozat 344231234 BD
12
Vincent 344231235 IC
13
Vincent 344231235 BD
14
Vincent 687990001 IC
15
Vincent 687990001 BD