Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment savoir si une valeur existe dans un VARRAY

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