Devi esporre la tabella annidata nella clausola FROM usando table()
funzione. Puoi quindi fare riferimento agli attributi della raccolta:
SQL> select g.title
2 from game_table g
3 , table(g.gametheme) gt
4 where gt.theme = 'Action';
TITLE
--------------------------------------------------
Star Wars
SQL>
"e se avessi bisogno di recuperare righe con più temi, ad esempio Azione, FPS?"
Mi scuso per la soluzione goffa, ma ora devo andare al lavoro. Potrei pubblicare una soluzione più elegante in seguito.
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>
Questo approccio alternativo non funzionerà con il tuo tipo attuale perché VARRAY non supporta member of
. Ma funzionerebbe se la collezione fosse una Nested Table.
select g.title
from game_table g
where 'Action' member of g.gametheme
and 'FPS' member of g.gametheme