Vous devez exposer la table imbriquée dans la clause FROM en utilisant le table()
une fonction. Vous pouvez ensuite référencer les attributs de la collection :
SQL> select g.title
2 from game_table g
3 , table(g.gametheme) gt
4 where gt.theme = 'Action';
TITLE
--------------------------------------------------
Star Wars
SQL>
"et si j'avais ensuite besoin de récupérer des lignes avec plusieurs thèmes, c'est-à-dire Action, FPS ?"
Toutes mes excuses pour la solution maladroite, mais je dois aller travailler maintenant. Je posterai peut-être une solution plus élégante plus tard.
SQL> select * from game_table
2 /
TITLE
--------------------------------------------------
GAMETHEME(THEME)
--------------------------------------------------------------------------------
Star Wars
THEME_TYPE(THEME_GAME('Action'), THEME_GAME('FPS'))
Uncharted 3
THEME_TYPE(THEME_GAME('Action'), THEME_GAME('Puzzle'))
Commander Cody
THEME_TYPE(THEME_GAME('Fun'), THEME_GAME('Puzzle'))
SQL> select g.title
2 from game_table g
3 , table(g.gametheme) gt
4 , table(g.gametheme) gt1
5 where gt.theme = 'Action'
6 and gt1.theme = 'FPS' ;
TITLE
--------------------------------------------------
Star Wars
SQL>
Cette approche alternative ne fonctionnera pas avec votre type actuel car VARRAY ne prend pas en charge member of
. Mais cela fonctionnerait si la collection était une table imbriquée.
select g.title
from game_table g
where 'Action' member of g.gametheme
and 'FPS' member of g.gametheme