Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да разберете дали дадена стойност съществува в рамките на VARRAY

Трябва да изложите вложената таблица в клаузата FROM с помощта на table() функция. След това можете да препратите атрибути на колекцията:

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

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

SQL> 

"ами ако тогава трябваше да извличам редове с множество теми, т.е. Действие, FPS?"

Извинявам се за тромавото решение, но трябва да отида на работа сега. Може да публикувам по-елегантно решение по-късно.

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> 

Този алтернативен подход няма да работи с текущия ви тип, защото VARRAY не поддържа member of . Но би работило, ако колекцията беше вложена таблица.

 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. SQL командата не е приключила правилно?

  2. Минус срещу разлика с изключение в ORACLE/SQL Server

  3. Индекс на дялове на Oracle

  4. Как да добавите пореден номер за всеки елемент в група с помощта на SQL заявка без временни таблици

  5. 11 начина за намиране на дублиращи се редове, които имат първичен ключ в Oracle