Du måste exponera den kapslade tabellen i FROM-satsen med table()
fungera. Du kan sedan referera till samlingens attribut:
SQL> select g.title
2 from game_table g
3 , table(g.gametheme) gt
4 where gt.theme = 'Action';
TITLE
--------------------------------------------------
Star Wars
SQL>
"tänk om jag sedan behövde hämta rader med flera teman, t.ex. Action, FPS?"
Ber om ursäkt för den klumpiga lösningen men jag måste gå till jobbet nu. Jag kanske lägger upp en mer elegant lösning senare.
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>
Detta alternativa tillvägagångssätt fungerar inte med din nuvarande typ eftersom VARRAY inte stöder member of
. Men det skulle fungera om samlingen var ett kapslat bord.
select g.title
from game_table g
where 'Action' member of g.gametheme
and 'FPS' member of g.gametheme