Sélection dans les collections imbriquées

SyntaxeAccè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;

AttentionJointure 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.

ExempleAccè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 

ExempleAccè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      

SyntaxeAccès aux colonnes d'une table imbriquée

1
SELECT t2.a, t2.b...
2
FROM t t1, TABLE(t1.col) t2;

SyntaxeAccè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