Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So erstellen Sie eine verschachtelte Tabelle mit einem benutzerdefinierten Datentyp in der Oracle-Datenbank

Hallo Leute! Heute werden wir lernen, wie man eine Sammlung verschachtelter Tabellentypen mit einem benutzerdefinierten Datentyp erstellt. Ich hoffe, Sie hatten viel Spaß mit dem letzten Tutorial, in dem wir den Erstellungsprozess einer verschachtelten Tabelle mit primitivem Datentyp gelernt haben. Ich empfehle Ihnen dringend, sich dieses Tutorial anzusehen, da wir die Konzepte von dort verwenden werden.

Ähnlich wie bei primitiven Datentypen kann eine verschachtelte Tabelle auch mit benutzerdefinierten Datentypen erstellt werden. Für die Demonstration verwenden wir das Benutzer-Oracle-Objekt. Objekte erfordern keine Einführung, wenn Sie jemals OOP-Konzepte studiert haben. In Oracle ist der Objekttyp wie in anderen Programmiersprachen eine Art Datentyp, der auf die gleiche Weise wie andere Datentypen wie Char, Varchar2, Number usw. funktioniert, jedoch mit mehr Flexibilität.

Um ein Oracle-Objekt zu erstellen, verwenden wir unsere alte und bewährte Anweisung „Create Type“.

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

Die obige Anweisung erstellt bei erfolgreicher Ausführung ein Oracle-Objekt mit dem Namen „Objekttyp“ mit zwei Attributen obj_id und obj_name. Dieser Datentyp kann dann verwendet werden, um eine verschachtelte Tabelle zu erstellen.

CREATE OR REPLACE TYPE My_NT IS TABLE OF object_type;
/

Ich denke, wenn Sie das letzte Tutorial überprüft haben, werden Sie diese obige Aussage sehr vertraut finden, mit Ausnahme des Elementtyps, der dort ein primitiver Datentyp ist. Hier verwenden wir einen benutzerdefinierten Datentyp, der ein Oracle-Objekt ist.

Die obige Anweisung wurde im letzten Tutorial ausführlich erklärt, das Sie hier überprüfen können.

Was bedeutet das Erstellen einer verschachtelten Tabelle mit Oracle Object?

Immer wenn Sie eine verschachtelte Tabelle mit einem Oracle-Objekt erstellen, werden die Attribute des Objekts zu den Spalten dieser Tabelle. In unserem Fall haben wir beispielsweise eine verschachtelte Tabelle „My_NT“ mit dem benutzerdefinierten Datentyp erstellt, bei dem es sich um ein Oracle-Objekt „Object_Type“ handelt, das zwei Attribute „obj_id“ und „obj_name“ hat. Diese beiden Attribute des Objekts fungieren als Spalten der Tabelle. Das folgende Bild wird Ihnen helfen, dies besser zu verstehen.

Nachdem wir nun die verschachtelte Tabelle mit benutzerdefinierten Datentypen erstellt haben, ist es an der Zeit, sie an die Arbeit zu bringen.

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

Die obige Tabelle mit dem Namen „Base_Table“ ist eine einfache Tabelle mit zwei Spalten „tab_id“ und „tab_ele“. Die erste Spalte ist vom Datentyp Zahl, während die zweite Spalte vom Typ Verschachtelte Tabelle ist. Das bedeutet, dass die zweite Spalte eine Tabelle enthält, und diese Tabelle ist unsere verschachtelte Tabelle „My_Nt“

Obwohl diese „Base_Table“ eine einfache Tabelle ist, enthält eine ihrer Spalten eine verschachtelte Tabelle, was einige Fragen aufwirft, wie zum Beispiel:

Wie fügt man Daten in die Tabelle ein? Wie aktualisiere ich die Daten der Tabelle? Oder wie kann man die Daten aus der Tabelle abrufen? Versuchen wir, die Antworten auf all diese Fragen nacheinander herauszufinden.

Wie fügt man Daten in die verschachtelte Tabelle ein?

Ja, ich stimme zu, dass das Einfügen von Daten in eine Tabelle mit einer Spalte vom Typ verschachtelte Tabelle schwierig sein kann, aber irgendwie müssen wir den Weg finden, dies zu tun. Denn eine Tabelle ohne Daten nützt uns nichts. Recht? Mal sehen, wie wir das machen können.

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

Wie Sie in dieser INSERT-Anweisung sehen können, ist alles dasselbe wie bei einer normalen Insert-DML, mit Ausnahme der Zeile Nummer 3, in der wir Daten in die zweite Spalte der Tabelle einfügen. Um Daten in die Spalte einzufügen, die vom Typ Verschachtelte Tabelle ist, müssen Sie zuerst den Namen Ihrer verschachtelten Tabelle schreiben, in diesem Fall 'My_NT', dann müssen Sie den Namen Ihres Oracle-Objekts schreiben, das hier 'Object_Type' ist. gefolgt von den Werten, die Sie in Ihre Tabelle einfügen möchten. Vergessen Sie nicht, die Klammern für den Tabellennamen und den Objektnamen abzugleichen, sonst erhalten Sie eine Fehlermeldung.

Wie aktualisiere ich die Werte der verschachtelten Tabelle?

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

Die obige DML-Anweisung aktualisiert die Werte bei erfolgreicher Ausführung entsprechend.

Wie werden Daten aus der verschachtelten Tabelle abgerufen?

Sie können einfach die Select-Anweisung für Ihre Tabelle ausführen, um die Daten abzurufen.

Select tab_id, tab_ele FROM base_table;

Das folgende Bild zeigt Ihnen das Ergebnis dieser Tabelle.

Wie Sie sehen können, zeigt Ihnen diese SELECT-Anweisung die Daten aus den Spalten, die vom primären Datentyp sind, aber nur den Namen Ihrer verschachtelten Tabelle zusammen mit dem Oracle-Objekt aus der Spalte, die Sie als verschachtelten Tabellentyp definieren. Sie können dieses Problem leicht überwinden, indem Sie einen TABLE-Ausdruck wie diesen verwenden.

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

Die erfolgreiche Ausführung der obigen Abfrage zeigt Ihnen die Daten aus der zweiten Spalte Ihrer Tabelle „Base_Table“ in einem relationalen Format.

Das war es für dieses Tutorial, ich hoffe, es hat Ihnen gefallen und Sie haben etwas Neues gelernt. Stellen Sie sicher, dass Sie sich anmelden und anmelden. Ich wünsche Ihnen einen schönen Tag!