sql >> Databáze >  >> RDS >> Oracle

Jak zjistit, zda hodnota existuje v rámci VARRAY

Musíte vystavit vnořenou tabulku v klauzuli FROM pomocí table() funkce. Poté můžete odkazovat na atributy kolekce:

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

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

SQL> 

"co kdybych pak potřeboval načíst řádky s více tématy, tj. akce, FPS?"

Omlouvám se za neohrabané řešení, ale už musím jít do práce. Později možná zveřejním elegantnější řešení.

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> 

Tento alternativní přístup nebude fungovat s vaším aktuálním typem, protože VARRAY nepodporuje member of . Ale fungovalo by to, kdyby kolekce byla vnořená tabulka.

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


  1. SQL dotaz:Smazat všechny záznamy z tabulky kromě posledních N?

  2. EF4 - Vybraná uložená procedura nevrací žádné sloupce

  3. Jak mohu importovat data z ASCII (ISO/IEC 8859-1) do své databáze Rails/PGSQL?

  4. Jak funguje sp_describe_first_result_set na serveru SQL Server