sql >> Databasteknik >  >> RDS >> Oracle

Hur man skapar kapslade tabeller med användardefinierad datatyp i Oracle Database

Hej killar! Idag kommer vi att lära oss hur man skapar en samling av kapslade tabelltyper med hjälp av användardefinierad datatyp. Hoppas du hade det bra med den senaste handledningen där vi lärde oss skapandeprocessen för kapslade tabeller med primitiv datatyp. Jag rekommenderar starkt att du tar en titt på den självstudien eftersom vi kommer att använda koncepten därifrån.

I likhet med primitiv datatyp kan en kapslad tabell också skapas med hjälp av användardefinierade datatyper. För demonstrationen kommer vi att använda användaren Oracle Object. Objekt kräver ingen introduktion, om du någonsin har studerat OOP Concepts. I Oracle, liksom andra programmeringsspråk, är objekttyp en slags datatyp som fungerar på samma sätt som andra datatyper som Char, Varchar2, Number etc. men med mer flexibilitet.

För att skapa ett Oracle-objekt använder vi vår gamla och pålitliga "Create Type"-sats.

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

Ovanstående uttalande kommer att skapa ett orakelobjekt med namnet "objekttyp" med två attribut obj_id och obj_name vid framgångsrik exekvering. Denna datatyp kan sedan användas för att skapa en kapslad tabell.

CREATE OR REPLACE TYPE My_NT IS TABLE OF object_type;
/

Jag tror att om du kollade på den senaste handledningen så kommer du att hitta detta ovanstående uttalande mycket bekant, förutom elementtypen som är en primitiv datatyp där. Här använder vi en användardefinierad datatyp som är ett Oracle Object.

Ovanstående uttalande har förklarats i detalj i den senaste handledningen som du kan kolla här.

Vad innebär det att skapa en kapslad tabell med Oracle Object?

När du skapar en kapslad tabell med ett Oracle-objekt blir objektets attribut kolumnerna i den tabellen. Till exempel, i vårt fall skapade vi en kapslad tabell 'My_NT' med den användardefinierade datatypen som är ett Oracle Object 'Object_Type' som har två attribut obj_id och obj_name. Dessa två attribut för objektet kommer att fungera som tabellens kolumner. Följande bild hjälper dig att förstå detta tydligare.

Nu när vi har skapat den kapslade tabellen med användardefinierad datatyp är det dags att sätta igång den.

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

Ovanstående tabell med namnet 'Base_Table' är en enkel sådan som har 2 kolumner 'tab_id' och 'tab_ele'. Den första kolumnen är av nummerdatatyp medan den andra kolumnen är av typen Kapslad tabell. Det betyder att den andra kolumnen innehåller en tabell i den och den tabellen är vår kapslade tabell 'My_Nt'

Även om denna "Base_Table" är en enkel tabell men en av dess kolumner innehåller en kapslad tabell i den som ställer några frågor som:

Hur infogar man data i tabellen? Hur uppdaterar man tabellens data? Eller hur man hämtar data från tabellen? Låt oss försöka ta reda på svaren på alla dessa frågor en i taget.

Hur infogar man data i den kapslade tabellen?

Ja, jag håller med om att det kan vara svårt att infoga data i en tabell som har en kolumn med kapslade tabelltyper, men på något sätt måste vi hitta sättet att göra det. Eftersom en tabell utan data inte är till någon nytta för oss. Rätt? Låt oss se hur vi kan göra det.

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

Som du kan se i denna INSERT-sats är allt detsamma som en vanlig Insert DML förutom rad nummer 3 där vi infogar data i den andra kolumnen i tabellen. För att infoga data i kolumnen som är av typen Nested Table måste du först skriva namnet på din kapslade tabell som i det här fallet är 'My_NT' sedan måste du skriva namnet på ditt Oracle Object som här är 'Object_Type' följt av de värden du vill infoga i din tabell. Glöm inte att matcha parentesen för tabellnamn och objektnamn, annars får du ett felmeddelande.

Hur uppdaterar man värden för den kapslade tabellen?

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

Ovanstående DML-sats kommer att uppdatera värdena i enlighet därmed vid framgångsrik exekvering.

Hur hämtar man data från den kapslade tabellen?

Du kan helt enkelt köra Select-satsen på din tabell för att hämta data.

Select tab_id, tab_ele FROM base_table;

Följande bild visar dig resultatet från denna tabell.

Som du kan se kommer denna SELECT-sats att visa dig data från kolumnerna som är av primär datatyp men bara namnet på din kapslade tabell tillsammans med Oracle-objektet från kolumnen som du definierar som en kapslad tabelltyp. Du kan enkelt övervinna detta problem genom att använda TABLE-uttryck som detta.

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

Framgångsrik exekvering av ovanstående fråga kommer att visa dig data från andra kolumnen i tabellen "Base_Table" i ett relationsformat.

Det var allt för denna handledning, hoppas du gillade och lärde dig något nytt. Se till att prenumerera och registrera dig. Ha en bra dag!


  1. SQL Server 2016:Återställ en databas

  2. Bästa sättet att lagra tid (tt:mm) i en databas

  3. Beräkna åldern i år i PostgreSQL

  4. Hur man bäst lagrar användarinformation och användarinloggning och lösenord