sql >> Database >  >> RDS >> Oracle

Hoe een geneste tabel te maken met behulp van door de gebruiker gedefinieerd gegevenstype in Oracle Database

Hallo jongens! Vandaag zullen we leren hoe we geneste tabeltypeverzameling kunnen maken met behulp van door de gebruiker gedefinieerd datatype. Ik hoop dat je een geweldige tijd hebt gehad met de laatste tutorial waarin we het creatieproces van een geneste tabel met primitief datatype hebben geleerd. Ik raad je ten zeerste aan om die tutorial te bekijken, aangezien we de concepten van daaruit gaan gebruiken.

Net als bij primitief datatype kan een geneste tabel worden gemaakt met behulp van door de gebruiker gedefinieerde datatypes. Voor de demonstratie gebruiken we de gebruiker Oracle Object. Objecten hebben geen introductie nodig, als je ooit OOP-concepten hebt bestudeerd. In Oracle is objecttype, net als andere programmeertalen, een soort datatype dat op dezelfde manier werkt als andere datatypes zoals Char, Varchar2, Number enz. Maar met meer flexibiliteit.

Om een ​​Oracle-object te maken gebruiken we ons oude en vertrouwde 'Create Type'-statement.

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

De bovenstaande instructie zal bij succesvolle uitvoering een orakelobject maken met de naam 'objecttype' met twee attributen obj_id en obj_name. Dit datatype kan vervolgens worden gebruikt om een ​​geneste tabel te maken.

CREATE OR REPLACE TYPE My_NT IS TABLE OF object_type;
/

Ik denk dat als je de laatste tutorial hebt gecontroleerd, je deze bovenstaande verklaring heel bekend zult vinden, behalve het elementtype dat daar een primitief datatype is. Hier gebruiken we een door de gebruiker gedefinieerd datatype dat een Oracle Object is.

De bovenstaande verklaring is in detail uitgelegd in de laatste zelfstudie die u hier kunt bekijken.

Wat betekent het maken van een geneste tabel met Oracle Object?

Telkens wanneer u een geneste tabel maakt met behulp van een Oracle-object, worden de attributen van het object de kolommen van die tabel. In ons geval hebben we bijvoorbeeld een geneste tabel 'My_NT' gemaakt met behulp van het door de gebruiker gedefinieerde gegevenstype, een Oracle-object 'Object_Type' met twee attributen obj_id en obj_name. Deze twee attributen van het object fungeren als de kolommen van de tabel. De volgende foto zal je helpen dit beter te begrijpen.

Nu we de geneste tabel hebben gemaakt met behulp van een door de gebruiker gedefinieerd gegevenstype, is het tijd om er wat aan te doen.

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

De bovenstaande tabel met de naam 'Base_Table' is een eenvoudige tabel met 2 kolommen 'tab_id' en 'tab_ele'. De eerste kolom is van het gegevenstype Number, terwijl de tweede kolom van het type Geneste tabel is. Dit betekent dat de tweede kolom een ​​tabel bevat en die tabel is onze geneste tabel 'My_Nt'

Hoewel deze 'Base_Table' een eenvoudige tabel is, bevat een van de kolommen ervan een geneste tabel die enkele vragen oproept, zoals:

Hoe gegevens in de tabel invoegen? Hoe de gegevens van de tabel bijwerken? Of hoe de gegevens uit de tabel te halen? Laten we proberen de antwoorden op al deze vragen een voor een te vinden.

Hoe voeg ik gegevens in de geneste tabel in?

Ja, ik ben het ermee eens dat het invoegen van gegevens in een tabel met een kolom van het geneste tabeltype lastig kan zijn, maar op de een of andere manier moeten we de manier vinden om dit te doen. Omdat een tabel zonder gegevens voor ons geen nut heeft. Rechts? Laten we eens kijken hoe we dat kunnen doen.

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

Zoals u in deze INSERT-instructie kunt zien, is alles hetzelfde als een normale Insert DML, behalve regelnummer 3 waar we gegevens invoegen in de tweede kolom van de tabel. Om gegevens in te voegen in de kolom die van het type geneste tabel is, moet u eerst de naam van uw geneste tabel schrijven, in dit geval 'My_NT', daarna moet u de naam van uw Oracle-object schrijven, dat hier 'Object_Type' is gevolgd door de waarden die u in uw tabel wilt invoegen. Vergeet niet de haakjes voor de tabelnaam en de objectnaam te matchen, anders krijg je een foutmelding.

Hoe de waarden van de geneste tabel bijwerken?

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

De bovenstaande DML-instructie zal de waarden dienovereenkomstig bijwerken bij een succesvolle uitvoering.

Hoe gegevens ophalen uit de geneste tabel?

U kunt eenvoudig de Select-opdracht op uw tafel uitvoeren om de gegevens te krijgen.

Select tab_id, tab_ele FROM base_table;

De volgende afbeelding toont u het resultaat van deze tabel.

Zoals u kunt zien, toont deze SELECT-instructie u de gegevens van de kolommen die van het primaire gegevenstype zijn, maar alleen de naam van uw geneste tabel samen met het Oracle-object uit de kolom die u definieert als een geneste tabeltype. U kunt dit probleem gemakkelijk oplossen door de TABLE-expressie zoals deze te gebruiken.

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

Een succesvolle uitvoering van de bovenstaande query toont u de gegevens uit de tweede kolom van uw tabel 'Base_Table' in een relationeel formaat.

Dat was het voor deze tutorial, ik hoop dat je genoten hebt en iets nieuws hebt geleerd. Zorg ervoor dat u zich abonneert en registreert. Fijne dag!


  1. De grootte van tabellen bepalen in Oracle

  2. Plsql om nummer (valuta) naar Italiaanse valuta te spellen zonder het vertalingsnummer hardgecodeerd te hebben

  3. SQL Server 2016:Queryontwerper

  4. De voordelen van het indexeren van buitenlandse sleutels