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

Jak vytvořit vnořenou tabulku jako databázový objekt v Oracle

Pokud plánujete znovu použít vnořenou tabulku, kterou chcete vytvořit, pak je pro vás nejlepší volbou to udělat jako databázový objekt. Můžete je trvale uložit do databáze a použít je, kdykoli budete chtít.

Kromě vytváření vnořené tabulky typu PL/SQL Collection uvnitř bloku PL/SQL je můžete také vytvořit jako databázový objekt a trvale uložit. Také je můžete znovu použít, kdykoli budete chtít. Vnořená tabulka vytvořená jako databázový objekt může být založena buď na primitivním datovém typu nebo na datovém typu definovaném uživatelem. V tomto tutoriálu se zaměříme na první a to druhé si necháme na příští tutoriál.

Jak vytvořit kolekci vnořených typů tabulek na základě primitivního datového typu

Primitivním datovým typem rozumíme datové typy, které jsou předdefinovány jazykem a jsou pojmenovány vyhrazeným klíčovým slovem. Další informace o datových typech PL/SQL naleznete v tomto dokumentu Oracle.

Následující tabulky nemají žádná omezení, index nebo cokoli, co je na nich navrženo, a jsou vytvořeny čistě pro ukázku toho, jak vytvořit vnořenou tabulku jako databázový objekt.

Krok 1:Zapněte výstup serveru

SET SERVEROUTPUT ON;

Krok 2:Vytvořte kolekci typu vnořená tabulka

CREATE OR REPLACE TYPE my_nested_table IS TABLE OF VARCHAR2 (10);
/

Výše uvedený příkaz o úspěšném provedení vytvoří vnořenou tabulku s názvem ‚my_nested_table‘, která bude založena na primitivním datovém typu VARCHAR2.

Krok 3:Jak používat vnořenou tabulku?

Typ kolekce, který jsme vytvořili výše, lze použít k určení typu sloupce tabulky.

CREATE TABLE my_subject(
	  sub_id    	NUMBER,
	  sub_name  	VARCHAR2 (20),
	  sub_schedule_day    my_nested_table
) NESTED TABLE sub_schedule_day STORE AS nested_tab_space;
/

Výše uvedená tabulka je normální tabulka kromě toho, že její 3 sloupce jsou typu vnořená tabulka, která může obsahovat více hodnot. Abyste mohli definovat sloupec tabulky jako vnořený typ tabulky, musíte kompilátoru sdělit název sloupce a tabulku úložiště. Můžete tak učinit pomocí klauzule NESTED ABLE a STORE AS, jak jsme to udělali zde na řádku číslo 5. Pomocí klauzule NESTED TABLE určíme název sloupce a pomocí klauzule STORE AS určíme tabulku úložiště pro vnořenou tabulku.

Můžete se podívat na video tutoriál, kde jsem podrobně vysvětlil výše uvedený proces vytváření tabulky.

Vložit řádky do tabulky

INSERT INTO my_subject (sub_id, sub_name, sub_schedule_day)
VALUES (101, 'Maths', my_nested_table('mon', 'Fri'));

Řádky do vnořené tabulky vkládáte stejně jako do normální tabulky. Chcete-li však vložit data do sloupce typu vnořené tabulky, musíte nejprve napsat název vnořené tabulky, což je v našem případě 'my_nested_table' (viz krok 2) a poté zapsat data podle datového typu vaší vnořené tabulky a uzavřete jej do závorky.

Načíst data z tabulky

K načtení dat z tabulky lze použít jednoduchý příkaz SELECT DML.

SELECT * FROM my_subject;

Tento jednoduchý příkaz DML vám ukáže všechna data uložená v tabulce, kterou jsme vytvořili výše. Chcete-li zobrazit data z konkrétního řádku, můžete použít klauzuli WHERE s SELECT DML

SELECT * FROM my_subject WHERE sub_id = 101;

Pokud chcete, můžete si pomoci poddotazu a zkontrolovat data ze sloupce, který jste definovali jako vnořený typ tabulky.

SELECT * FROM TABLE (
  SELECT sub_schedule_day FROM my_subject WHERE sub_id = 101
);

Výše uvedený dotaz vám zobrazí data subjektu, který má id subjektu 101 pouze ze sloupce sub_schedule_day. V tomto dotazu jsme použili výraz TABLE k otevření instance a zobrazení dat v relačním formátu.

Aktualizovat data tabulky

Můžete buď aktualizovat všechny hodnoty sloupce, který definujete jako vnořenou tabulku, nebo můžete aktualizovat jednu jeho instanci.

Aktualizujte všechny hodnoty sloupce typu vnořené tabulky.

UPDATE my_subject SET sub_schedule_day = my_nested_table('Tue', 'Sat') 
WHERE sub_id = 101;
/

Výše uvedený dotaz aktualizuje všechny hodnoty sub_schedule_day z ‚Pon‘, ‚Pá‘ na ‚Út‘ a ‚So‘. Nyní předpokládejme, že chcete aktualizovat pouze jednu instanci tohoto sloupce nahrazením „So“ za „Čt“. Jak to uděláte?

Aktualizovat jednu instanci vnořené tabulky

Chcete-li aktualizovat jednu instanci sloupce typu vnořená tabulka, můžete znovu použít výraz TABLE.

UPDATE TABLE
  (SELECT sub_schedule_day FROM my_subject 
  WHERE sub_id = 101) A
SET A.COLUMN_VALUE   = 'Thur' 
WHERE A.COLUMN_VALUE = 'Sat';

Výše uvedený dotaz aktualizuje hodnotu v tabulce z ‚So‘ na ‚Čt‘.

Doufám, že se vám čtení líbilo a dozvěděli jste se něco nového. Nezapomeňte se přihlásit k odběru našeho kanálu, protože mnoho takových zajímavých tutoriálů je na cestě. Děkuji a přeji hezký den!


  1. SQL Server nahradit, odstranit vše po určitém znaku

  2. Jak to_char() funguje v PostgreSQL

  3. Jak nainstalovat sqlcmd &bcp na Red Hat

  4. Instalace Oracle 12c Enterprise Edition na Windows 7