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

Jak vytvořit vnořenou tabulku pomocí uživatelsky definovaného datového typu v databázi Oracle

Hej lidi! Dnes se naučíme, jak vytvořit kolekci vnořených typů tabulek pomocí uživatelsky definovaného datového typu. Doufám, že jste si užili skvělý čas s posledním tutoriálem, kde jsme se naučili proces vytváření vnořené tabulky s primitivním datovým typem. Důrazně vám doporučuji, abyste se podívali na tento tutoriál, protože tam budeme používat koncepty.

Podobně jako primitivní datový typ lze vytvořit vnořenou tabulku také pomocí uživatelsky definovaných datových typů. Pro demonstraci použijeme uživatele Oracle Object. Objekty nevyžadují žádný úvod, pokud jste někdy studovali koncepty OOP. V Oracle, stejně jako v jiných programovacích jazycích, je typ objektu druh datového typu, který funguje stejným způsobem jako jiné datové typy, jako je Char, Varchar2, Number atd., ale s větší flexibilitou.

K vytvoření objektu Oracle používáme naše staré a důvěryhodné prohlášení „Create Type“.

CREATE OR REPLACE TYPE object_type AS OBJECT (
  obj_id  NUMBER,
  obj_name  VARCHAR2(10)
);
/

Výše uvedený příkaz vytvoří při úspěšném provedení objekt oracle s názvem ‚object type‘ se dvěma atributy obj_id a obj_name. Tento datový typ pak lze použít k vytvoření vnořené tabulky.

CREATE OR REPLACE TYPE My_NT IS TABLE OF object_type;
/

Myslím, že pokud jste zkontrolovali poslední tutoriál, zjistíte, že toto výše uvedené prohlášení je velmi známé, kromě typu prvku, který je tam primitivním datovým typem. Zde používáme uživatelsky definovaný datový typ, kterým je objekt Oracle.

Výše uvedené prohlášení bylo podrobně vysvětleno v posledním tutoriálu, který si můžete prohlédnout zde.

Co znamená vytvoření vnořené tabulky pomocí Oracle Object?

Kdykoli vytvoříte vnořenou tabulku pomocí objektu Oracle, pak se atributy objektu stanou sloupci této tabulky. Například v našem případě jsme vytvořili vnořenou tabulku ‚My_NT‘ pomocí uživatelsky definovaného datového typu, což je objekt Oracle ‚Object_Type‘, který má dva atributy obj_id a obj_name. Tyto dva atributy objektu budou fungovat jako sloupce tabulky. Následující obrázek vám pomůže lépe to pochopit.

Nyní, když jsme vytvořili vnořenou tabulku pomocí uživatelsky definovaného datového typu, je čas ji uvést do práce.

CREATE TABLE Base_Table(
  tab_id  NUMBER,
  tab_ele My_NT
)NESTED TABLE tab_ele STORE AS stor_tab_1;
/

Výše uvedená tabulka s názvem ‚Base_Table‘ je jednoduchá, která má 2 sloupce ‚tab_id‘ a ‚tab_ele‘. První sloupec je typu Number Datatype, zatímco druhý sloupec je typu Nested Table. To znamená, že druhý sloupec obsahuje tabulku a tato tabulka je naše vnořená tabulka ‚My_Nt‘

Ačkoli je tato ‚Základní_tabulka‘ jednoduchá tabulka, ale jeden z jejích sloupců obsahuje vnořenou tabulku, což vyvolává některé otázky, jako například:

Jak vložit data do tabulky? Jak aktualizovat data v tabulce? Nebo jak získat data z tabulky? Pokusme se najít odpovědi na všechny tyto otázky jednu po druhé.

Jak vložit data do vnořené tabulky?

Ano, souhlasím s tím, že vkládání dat do tabulky, která má sloupec typu vnořená tabulka, může být složité, ale nějak musíme najít způsob, jak to udělat. Protože tabulka bez dat je nám k ničemu. Že jo? Pojďme se podívat, jak to můžeme udělat.

 INSERT INTO base_table (tab_id, tab_ele) VALUES
 (801,  -- value for 1st colum 
   My_NT (object_type (1,'Superman') -- values for 2nd column )
 );

Jak můžete vidět v tomto příkazu INSERT, vše je stejné jako normální Insert DML kromě řádku číslo 3, kde vkládáme data do druhého sloupce tabulky. Abyste mohli vložit data do sloupce typu Nested Table, musíte nejprve napsat název vaší vnořené tabulky, což je v tomto případě 'My_NT', poté musíte napsat název vašeho objektu Oracle, který je zde 'Object_Type' následované hodnotami, které chcete vložit do tabulky. Nezapomeňte spojit závorky pro název tabulky a název objektu, jinak se zobrazí chyba.

Jak aktualizovat hodnoty vnořené tabulky?

UPDATE base_table SET tab_ele = My_NT(object_type(1,'SpiderMan')) WHERE tab_id = 801; 

Výše uvedený příkaz DML aktualizuje odpovídajícím způsobem hodnoty po úspěšném provedení.

Jak načíst data z vnořené tabulky?

Data získáte jednoduše provedením příkazu Select na vašem stole.

Select tab_id, tab_ele FROM base_table;

Následující obrázek vám ukáže výsledek vrácený z této tabulky.

Jak můžete vidět, tento příkaz SELECT vám zobrazí data ze sloupců, které jsou primárního datového typu, ale pouze název vaší vnořené tabulky spolu s objektem Oracle ze sloupce, který definujete jako typ vnořené tabulky. Tento problém můžete snadno překonat použitím výrazu TABLE, jako je tento.

SELECT * FROM TABLE(
  SELECT tab_ele FROM Base_Table WHERE tab_id = 801
)

Úspěšné provedení výše uvedeného dotazu vám zobrazí data z druhého sloupce vaší tabulky ‚Base_Table‘ v relačním formátu.

To je pro tento tutoriál vše, doufáme, že se vám líbilo a naučili se něco nového. Nezapomeňte se přihlásit k odběru a přihlášení. Krásný den!


  1. ORA-28001:Platnost hesla vypršela

  2. Základní správa MaxScale pomocí MaxCtrl pro MariaDB Cluster – část druhá

  3. Problémy při používání Microsoft Access Runtime

  4. Doctrine 2 mysql FIELD funkce v pořadí podle