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

So erstellen Sie eine verschachtelte Tabelle als Datenbankobjekt in Oracle

Wenn Sie die zu erstellende verschachtelte Tabelle wiederverwenden möchten, ist dies die beste Wahl für Sie, wenn Sie dies als Datenbankobjekt tun. Sie können sie dauerhaft in Ihrer Datenbank speichern und jederzeit verwenden.

Neben der Erstellung einer PL/SQL-Sammlung vom Typ Nested Table innerhalb eines PL/SQL-Blocks können Sie diese auch als Datenbankobjekt erstellen und dauerhaft speichern. Sie können sie auch jederzeit wiederverwenden. Als Datenbankobjekt erstellte verschachtelte Tabellen können entweder auf dem primitiven Datentyp oder dem benutzerdefinierten Datentyp basieren. In diesem Tutorial konzentrieren wir uns auf Ersteres und überlassen Letzteres dem nächsten Tutorial.

So erstellen Sie eine Sammlung verschachtelter Tabellentypen basierend auf einem primitiven Datentyp

Unter primitivem Datentyp verstehen wir die Datentypen, die von der Sprache vordefiniert und durch ein reserviertes Schlüsselwort benannt werden. Weitere Informationen zu PL/SQL-Datentypen finden Sie in diesem Oracle-Dokument.

Die folgenden Tabellen haben keine Einschränkungen, Indizes oder irgendetwas, das darauf ausgelegt ist, und wurden nur erstellt, um zu demonstrieren, wie man eine verschachtelte Tabelle als Datenbankobjekt erstellt.

Schritt 1:Serverausgabe aktivieren

SET SERVEROUTPUT ON;

Schritt 2:Verschachtelte Tabellentypsammlung erstellen

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

Die obige Anweisung erstellt bei erfolgreicher Ausführung eine verschachtelte Tabelle mit dem Namen „my_nested_table“, die auf dem primitiven Datentyp VARCHAR2 basiert.

Schritt 3:Wie verwende ich verschachtelte Tabellen?

Der Sammlungstyp, den wir oben erstellt haben, kann verwendet werden, um den Typ einer Spalte einer Tabelle anzugeben.

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;
/

Die obige Tabelle ist eine normale Tabelle, außer dass ihre 3-Spalte vom verschachtelten Tabellentyp ist, der mehrere Werte enthalten kann. Um eine Spalte einer Tabelle als verschachtelten Tabellentyp zu definieren, müssen Sie dem Compiler den Namen der Spalte und eine Speichertabelle mitteilen. Sie können dies tun, indem Sie die Klausel NESTED ABLE und STORE AS verwenden, wie wir es hier in Zeile 5 getan haben. Mit der Klausel NESTED TABLE geben wir den Namen der Spalte an und mit der Klausel STORE AS geben wir die Speichertabelle für die verschachtelte Tabelle an.

Sie können auf das Video-Tutorial verweisen, in dem ich den obigen Tabellenerstellungsprozess Schritt für Schritt erklärt habe.

Zeilen in die Tabelle einfügen

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

Sie fügen Zeilen in die verschachtelte Tabelle genauso ein wie in die normale Tabelle. Um jedoch Daten in die Spalte des verschachtelten Tabellentyps einzufügen, müssen Sie zuerst den Namen der verschachtelten Tabelle schreiben, der in unserem Fall „my_nested_table“ ist (siehe Schritt 2), und dann die Daten entsprechend dem Datentyp Ihrer verschachtelten Tabelle und schreiben schließen Sie es in die Klammer ein.

Daten aus der Tabelle abrufen

Eine einfache SELECT-DML-Anweisung kann verwendet werden, um die Daten aus der Tabelle abzurufen.

SELECT * FROM my_subject;

Diese einfache DML-Anweisung zeigt Ihnen alle Daten, die in der Tabelle gespeichert sind, die wir oben erstellt haben. Um die Daten einer bestimmten Zeile anzuzeigen, können Sie die WHERE-Klausel mit SELECT DML

verwenden
SELECT * FROM my_subject WHERE sub_id = 101;

Wenn Sie möchten, können Sie die Hilfe der Unterabfrage verwenden, um einfach die Daten aus der Spalte zu überprüfen, die Sie als verschachtelten Tabellentyp definiert haben.

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

Die obige Abfrage zeigt Ihnen die Daten des Subjekts mit der Subjekt-ID 101 nur aus der Spalte sub_schedule_day. In dieser Abfrage haben wir den TABLE-Ausdruck verwendet, um die Instanz zu öffnen und die Daten im relationalen Format anzuzeigen.

Daten der Tabelle aktualisieren

Sie können entweder alle Werte der Spalte aktualisieren, die Sie als verschachtelte Tabelle definieren, oder Sie können eine einzelne Instanz derselben aktualisieren.

Alle Werte der verschachtelten Tabellenspalte aktualisieren.

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

Die obige Abfrage aktualisiert alle Werte von sub_schedule_day von „Mon“, „Fr“ auf „Di“ und „Sa“. Angenommen, Sie möchten nur eine einzige Instanz dieser Spalte aktualisieren, indem Sie „Sa“ durch „Do“ ersetzen. Wie machst du das?

Einzelne Instanz einer verschachtelten Tabelle aktualisieren

Um eine einzelne Instanz einer verschachtelten Tabellenspalte zu aktualisieren, können Sie wieder die Hilfe des TABLE-Ausdrucks nehmen.

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

Die obige Abfrage aktualisiert den Wert in der Tabelle von „Sa“ auf „Do“.

Ich hoffe, Sie hatten Spaß beim Lesen und haben etwas Neues gelernt. Stellen Sie sicher, dass Sie unseren Kanal abonnieren, da viele solcher interessanten Tutorials unterwegs sind. Danke, schönen Tag noch!