U moet de geneste tabel in de FROM-component blootleggen met behulp van de table()
functie. U kunt dan verwijzen naar attributen van de collectie:
SQL> select g.title
2 from game_table g
3 , table(g.gametheme) gt
4 where gt.theme = 'Action';
TITLE
--------------------------------------------------
Star Wars
SQL>
"wat als ik dan rijen met meerdere thema's moet ophalen, bijv. Actie, FPS?"
Excuses voor de onhandige oplossing, maar ik moet nu aan het werk. Misschien post ik later een elegantere oplossing.
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>
Deze alternatieve aanpak werkt niet met uw huidige type omdat VARRAY member of
. niet ondersteunt . Maar het zou werken als de verzameling een geneste tafel was.
select g.title
from game_table g
where 'Action' member of g.gametheme
and 'FPS' member of g.gametheme