Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So finden Sie heraus, ob ein Wert in einem VARRAY vorhanden ist

Sie müssen die verschachtelte Tabelle in der FROM-Klausel mit table() verfügbar machen Funktion. Sie können dann Attribute der Sammlung referenzieren:

SQL> select g.title
  2  from game_table g
  3       , table(g.gametheme) gt
  4  where gt.theme = 'Action';

TITLE
--------------------------------------------------
Star Wars

SQL> 

"Was wäre, wenn ich dann Zeilen mit mehreren Themen abrufen müsste, z. B. Action, FPS?"

Entschuldigung für die klobige Lösung, aber ich muss jetzt zur Arbeit gehen. Ich kann später eine elegantere Lösung posten.

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> 

Dieser alternative Ansatz funktioniert nicht mit Ihrem aktuellen Typ, da VARRAY member of nicht unterstützt . Aber es würde funktionieren, wenn die Sammlung eine verschachtelte Tabelle wäre.

 select g.title
  from game_table g
  where  'Action' member of g.gametheme
  and 'FPS' member of g.gametheme