sql >> Database teknologi >  >> RDS >> Oracle

Sådan finder du ud af, om der findes en værdi i en VARRAY

Du skal blotlægge den indlejrede tabel i FROM-sætningen ved hjælp af table() fungere. Du kan derefter henvise til attributter for samlingen:

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

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

SQL> 

"hvad nu hvis jeg så havde brug for at hente rækker med flere temaer, f.eks. Action, FPS?"

Undskyld for den klodsede løsning, men jeg skal på arbejde nu. Jeg vil muligvis sende en mere elegant løsning senere.

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> 

Denne alternative tilgang vil ikke fungere med din nuværende type, fordi VARRAY ikke understøtter member of . Men det ville fungere, hvis samlingen var et indlejret bord.

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


  1. RODBC midlertidigt tabelproblem ved tilslutning til MS SQL Server

  2. Sådan udskiftes en del af en streng i MySQL

  3. Oracle 12cR2 nu i Beta

  4. En guide til at forstå databaseskaleringsmønstre