Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak sprawdzić, czy wartość istnieje w VARRAY

Musisz ujawnić zagnieżdżoną tabelę w klauzuli FROM za pomocą table() funkcjonować. Następnie możesz odwołać się do atrybutów kolekcji:

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

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

SQL> 

„co by było, gdybym musiał pobrać wiersze z wieloma motywami, np. Akcja, FPS?”

Przepraszamy za niezdarne rozwiązanie, ale muszę już iść do pracy. Mogę później opublikować bardziej eleganckie rozwiązanie.

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> 

To alternatywne podejście nie będzie działać z Twoim obecnym typem, ponieważ VARRAY nie obsługuje member of . Ale zadziałałoby, gdyby kolekcja była zagnieżdżoną tabelą.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. czy jest jakaś funkcja do tłumaczenia danych w sql

  2. Statystyki tabeli GTT i SYS.WRI$_OPTSTAT_TAB_HISTORY

  3. Deklarowanie i ustawianie zmiennych w instrukcji Select

  4. Pierwsze kroki z Oracle LiveSQL

  5. Jak przyciąć tabelę w procedurze Oracle?