pl sql collections nested table
Lernen Sie anhand von Codebeispielen die Grundlagen von PL SQL-Sammlungen, Erfassungsmethoden, Varray, verschachtelten Tabellen und assoziativen Arrays kennen:
In dem PL / SQL-Unterprogramme Tutorial der PL / SQL-Serie Wir lernten Prozeduren und Funktionen, verschiedene Methoden zur Parameterübergabe und das Erstellen / Löschen von Prozeduren und Funktionen in PL / SQL.
In diesem Artikel werden die PL SQL-Sammlungen und verwandte Konzepte erläutert. Wir werden auch das Konzept von Varrays, verschachtelten Tabellen und Index-by-Tabellen erläutern, die in PL / SQL verfügbar sind.
Außerdem werden wir einige der integrierten Sammlungsausnahmen und Sammlungsmethoden untersuchen.
Was du lernen wirst:
- PL SQL-Sammlungen
- Verschachtelte Tabellen in PL / SQL
- Assoziative Array- oder Index-by-Tabellen
- Varrays In PL / SQL
- Fazit
PL SQL-Sammlungen
Eine Sammlung ist eine Gruppe von Elementen homogener Datentypen. Es umfasst im Allgemeinen Arrays, Listen, Mengen usw. Jedes der Elemente hat einen bestimmten Index, der seine Position widerspiegelt.
Es gibt folgende Arten von PL SQL-Sammlungen:
- Assoziative Array / Index-by-Tabellen
- Verschachtelte Tabellen.
- Varrays.
PL SQL-Sammlungen werden im Allgemeinen zum Speichern und Bearbeiten großer Datenmengen unter Verwendung des Schlüsselworts BULK COLLECT in Oracle verwendet.
Sammelmethoden
Pl / SQL verfügt über einige integrierte Methoden, die unten aufgeführt sind.
Sl. Nein. | Name | Beschreibungen |
---|---|---|
7 | weiter (m) | Gibt den Index an, der auf den m-ten Index folgt. |
1 | Anzahl | Gibt die Anzahl der in der Sammlung vorhandenen Elemente an. |
zwei | Grenze | Überprüft die Sammlungsgröße. |
3 | existiert (m) | Gibt true zurück, wenn das in der Auflistung vorhandene m-te Element andernfalls false zurückgibt. |
4 | zuerst | Gibt die Startindexnummer in der Sammlung mit einem ganzzahligen Index an. |
5 | letzte | Gibt die Endindexnummer in der Sammlung mit einem ganzzahligen Index an. |
6 | erweitern | Fügt dem Sammlungsende das Element NULL hinzu. |
8 | vor (m) | Gibt den Index vor dem m-Index an. |
9 | trimmen | Löscht ein Element am Ende der Sammlung. |
10 | trimmen (m) | Löscht m Elemente am Ende der Sammlung. |
elf | löschen | Löscht alle Elemente aus der Sammlung und setzt die Anzahl auf 0. |
12 | löschen (m) | Löscht das m-te Element aus der Sammlung. Wenn das m-te Element NULL ist, wird keine Aktion ausgeführt. |
13 | löschen (m, k) | Löscht das Element von der m-ten bis zur k-ten Position. |
14 | verlängern (m) | Fügt dem Sammlungsende das Element m hinzu. |
fünfzehn | verlängern (m, k) | Fügt am Ende der Sammlung m Kopien des k-ten Elements hinzu. |
Sammlungsausnahmen
Einige der häufigsten Sammlungsausnahmen sind folgende:
- VALUE_ERROR: Diese Ausnahme wird ausgelöst, wenn ein Index nicht in den Schlüsseltyp konvertiert werden kann oder NULL ist. Diese Ausnahme wird normalerweise ausgelöst, wenn ein Schlüssel vom Typ PLS_INTEGER ist und sich der Index außerhalb dieses Bereichs befindet.
- KEINE DATEN GEFUNDEN: Diese Ausnahme wird von PL / SQL ausgelöst, wenn entweder eine SELECT-Anweisung keine Zeilen abruft oder ein Programm auf ein Element verweist, das in einer verschachtelten Tabelle gelöscht wird. Diese Ausnahme kann auch durch ein Element ausgelöst werden, das in einer Index-by-Tabelle nicht initialisiert ist.
- COLLECTION_IS_NULL: Diese Ausnahme wird von PL / SQL ausgelöst, wenn die Auflistung standardmäßig NULL ist.
- SUBSCRIPT_BEYOND_COUNT: Diese Ausnahme wird ausgelöst, wenn ein Index mehr als die Gesamtzahl der Elemente in der Auflistung beträgt.
- SUBSCRIPT_OUTSIDE_LIMIT: Diese Ausnahme wird ausgelöst, wenn ein Index den Schwellenbereich überschreitet.
Verschachtelte Tabellen in PL / SQL
Die verschachtelten Tabellen ähneln einer einspaltigen Datenbanktabelle oder einem eindimensionalen Array, bei dem die Arraygröße dynamisch ist. Sein Index ist vom numerischen Typ. Wir können die verschachtelte Tabelle in eine Variable umwandeln, indem wir den Zeilen einen Index geben, der mit 1 beginnt. Diese Funktion ähnelt in ihrer Natur einem Array.
Eine verschachtelte Tabelle kann in einer Spalte einer Datenbank gespeichert werden. Es kann auch zum Bearbeiten von SQL-Operationen durch Verknüpfen von Tabellen verwendet werden. Da es sich um ein dynamisches Array handelt, kann die Obergrenze beliebig groß sein.
Eine verschachtelte Tabelle kann sowohl dichte als auch spärliche Auflistungseigenschaften aufweisen. Dies bedeutet, dass jedes Element mithilfe der DELETE-Prozedur zufällig gelöscht werden kann (wodurch es spärlich wird). Das Löschen von Daten führt zu einer Diskontinuität im Index, aber die NEXT-Funktion hilft bei der Iteration zu den nächsten Indizes. Da die Daten in Form einer Tabelle gespeichert sind, können sie mit Hilfe von SELECT-Anweisungen abgerufen werden.
Eine verschachtelte Tabelle kann auf Schemaebene oder im PL / SQL-Block erstellt werden. Es ist wie ein Datenbankobjekt, auf das innerhalb der Datenbank oder des Unterprogramms zugegriffen werden kann.
Die Unterschiede zwischen Array und verschachtelter Tabelle sind unten aufgeführt:
- Die Größe der verschachtelten Tabellen kann dynamisch erhöht werden. Die Obergrenze eines Arrays ist festgelegt, für verschachtelte Tabellen jedoch nicht.
- Das Array hat aufeinanderfolgende Indizes, wodurch es dicht wird. Eine verschachtelte Tabelle ist jedoch zum Zeitpunkt der Erstellung dicht, wird jedoch spärlich, sobald die Elemente dazwischen gelöscht werden.
Syntax der verschachtelten Tabelle:
TYPE <> IS TABLE OF <> (NOT NULL);
Hier, 'Art' ist der Typbezeichner. 'Element' ist der Datentyp.
Code-Implementierung mit der verschachtelten Tabelle:
DECLARE TYPE subject IS TABLE OF VARCHAR(15); TYPE teacher IS TABLE OF VARCHAR2(20); subjectnames subject; subjectteacher teacher; summ integer; BEGIN -- adding subject and its teachers to the table subjectnames := subject('PLSQL', 'SELENIUM', 'JMETER'); subjectteacher:= teacher('Sashi', 'Mala', 'Mukund'); -- returns count of number of elements in nested table summ:= subjectteacher.count; -- printing the content to the console dbms_output.put_line('Total Number of Teachers: '|| summ); FOR i IN 1 .. summ LOOP dbms_output.put_line('Subject:'||subjectnames(i)||', Teacher:' || subjectteacher(i)); end loop; END;
Die Ausgabe des obigen Codes sollte sein:
Assoziative Array- oder Index-by-Tabellen
Die Index-by-Tabelle wird üblicherweise als assoziatives Array bezeichnet. In Bezug auf die Struktur sind sowohl die Index-by-Tabelle als auch die verschachtelten Tabellen ähnlich und haben einen Index für den Zugriff auf die Elemente.
Ein assoziatives Array wird durch ein Schlüssel-Wert-Paar dargestellt. Jeder der eindeutigen Schlüssel wird verwendet, um den Wert im Array zu identifizieren. Der Datentyp des Schlüssels kann eine Zeichenfolge oder eine Ganzzahl sein, die beim Erstellen definiert wurde. Der Index-by-Tabelle wird ein Schlüssel hinzugefügt, indem einfach zum ersten Mal ein Wert zugewiesen wird. Um denselben Eintrag zu ändern, müssen wir denselben Schlüssel verwenden.
Der Schlüssel sollte eindeutig sein, entweder als Primärschlüssel in einer Tabelle oder durch Kombinieren von Zeichenfolgen, um einen eindeutigen Wert zu entwickeln. Diese Art der Sammlung hat eine Arraygröße, die dynamisch ist und entweder spärliche oder dichte Eigenschaften aufweist. Ein Unterschied zwischen der Index-by-Tabelle und der verschachtelten Tabelle besteht darin, dass die erstere nicht in der Spalte der Datenbank gespeichert werden kann, die verschachtelte Tabelle jedoch gespeichert werden kann.
Die assoziativen Arrays ermöglichen eine einfache Pflege des Index und werden in einem PL / SQL-Block erstellt. Es ist wie in einer SQL-Tabelle, in der Werte mithilfe des Primärschlüssels abgerufen werden. Dies wird im Allgemeinen für die temporäre Datenspeicherung verwendet und kann anstelle von SQL-Tabellen verwendet werden, um den für SQL-Tabellen erforderlichen Netzwerkverkehr und Festplattenspeicher zu vermeiden.
Da die assoziativen Arrays keine persistenten Daten speichern, können sie nicht mit SQL-Anweisungen wie SELECT und INSERT verwendet werden. Sie können jedoch für eine Sitzung der Datenbank endlos gemacht werden, indem ihr Datentyp als Paket deklariert und im Hauptteil des Pakets definiert wird.
Syntax der Index-by-Tabelle:
TYPE type IS TABLE OF element (NOT NULL) INDEX BY (BINARY_INTEGER | PLS_INTEGER | VARCHAR2(size)); INDEX BY key;
Hier das 'Schlüssel' ist numerisch. Es kann entweder BINARY_INTEGER oder PLS_INTEGER sein. Der Datentyp kann varchar, varchar2, long oder string sein. Der varchar-basierte Schlüssel sollte mit der Länge angegeben werden.
'Element' ist der Datentyp.
'Größe' ist die maximale Anzahl von Elementen. Es ist eine positive ganze Zahl.
'Art' ist der Typbezeichner.
Code-Implementierung mit der Index-by-Tabelle:
DECLARE TYPE age IS TABLE OF NUMBER INDEX BY VARCHAR(25); age_empl age; employee VARCHAR(25); BEGIN -- adding employee details to the table age_empl('Sam') := 30; age_empl('Venu') := 35; -- printing the table contents in the console employee := age_empl.FIRST; WHILE employee IS NOT null LOOP dbms_output.put_line ('Employee name is ' || employee || ' and age is ' || TO_CHAR(age_empl(employee))); employee := age_empl.NEXT(employee); END LOOP; END; /
Die Ausgabe des obigen Codes sollte sein:
Varrays In PL / SQL
Die Varrays speichern eine feste Anzahl von Elementen und sind wie ein eindimensionales Array. Die Anzahl der Elemente kann jedoch zur Laufzeit geändert werden. Es handelt sich um einen fortlaufenden Satz von Elementen ähnlicher Datentypen. Es kann in einer Datenbanktabelle gespeichert werden, die mit Hilfe von SQL-Anweisungen verarbeitet werden kann. Der Prozess ist jedoch nicht so einfach und flexibel wie in einer verschachtelten Tabelle.
Die maximale Größe von Varray wird in seiner Typdefinition definiert. Es hat eine Speicheranordnung nach der anderen, beginnend mit 1 Index, und die Adresse mit der niedrigsten Position zeigt auf das Startelement und die Adresse mit der höchsten Position zeigt auf das Endelement. Alle Elemente eines Varray sind mit einem Index gekennzeichnet.
Diese Art der Sammlung hat einen numerischen Index und dichte Eigenschaften. Somit können die Array-Elemente nicht dazwischen gelöscht werden. Entweder sollte der gesamte Varray gelöscht werden oder sein Ende kann gekürzt werden. Aufgrund seiner dichten Eigenschaften weist es eine geringere Flexibilität bei der Verwendung auf.
Der Varray kann entweder innerhalb eines PL / SQL-Blocks oder auf Schemaebene erstellt werden. Es wird als Datenbankobjekt behandelt, auf das innerhalb der Datenbank oder innerhalb eines Unterprogramms zugegriffen werden kann. Varray wird häufiger verwendet, wenn uns die Größe des Arrays bekannt ist. Es sollte vor der Verwendung initialisiert werden und kann mit Hilfe eines Konstruktors initialisiert werden. Sein Wert ist NULL, wenn er deklariert ist, und sollte initialisiert werden, bevor auf seine Elemente verwiesen wird.
Syntax von Varray:
TYPE <> IS VARYING ARRAY (<>) OF <> (NOT NULL);
Hier,
'Art' ist der Typbezeichner.
'Element' ist der Datentyp.
'Größe' ist die maximale Anzahl von Elementen in einem Array. Es ist eine positive ganze Zahl.
Deklaration und Initialisierung von Varray-Variablen
Nachdem wir einen Varray erstellt haben, können wir ihn wie folgt deklarieren:
Syntax:
name type_n (:= type_n(...));
Hier,
'Name' ist der Varray-Name.
'Type_n' ist die Art von Varray.
‘Type_n (…)’ ist der Konstruktor vom Typ Varray. Die Argumentlisten werden durch ein Komma-Trennzeichen vom Typ Varray erwähnt.
Wir müssen eine Varray-Variable initialisieren, bevor wir sie verwenden können, da sonst ein nicht initialisierter Erfassungsfehler auftritt. Die Initialisierung erfolgt auf die unten beschriebene Weise.
Syntax:
name type_n := type_n();
Dadurch wird die Variable mit Nullelementen initialisiert. Um Elemente in den Varray-Variablen zu füllen, Die Syntax lautet:
name type_n := type_n(e1, e2, ...);
Zugriff auf Elemente von Varray
Auf die Elemente kann mit dem unten beschriebenen Prozess zugegriffen werden:
Name (m); Dabei ist m der Elementindex, der mit 1 beginnt und mit der maximalen Anzahl der Elemente vom Typ Varray endet. Wenn m außerhalb des Bereichs von 1 und der maximalen Anzahl der Elemente liegt, SUBSCRIPT_BEYOND_COUNT Ausnahme wird von PL / SQL ausgelöst.
Die Größe von Varray kann mit Hilfe der ALTER-Anweisung geändert werden.
Code-Implementierung mit ALTER.
CREATE Or REPLACE TYPE names AS VARRAY(2) OF VARCHAR(5); /
Die Ausgabe des obigen Codes sollte sein.
Linkliste in c ++
Code-Implementierung mit Varray:
DECLARE type countrynames IS VARRAY(3) OF VARCHAR2(50); type currency IS VARRAY(3) OF VARCHAR2(15); country countrynames; cur currency; addition integer; BEGIN -- adding country and its currency to the table country := countrynames('INDIA', 'USA', 'UK'); cur:= currency('INR', 'DOLLAR', 'POUND'); -- returns count of number of countries in varray addition := country.count; -- printing the content to the console dbms_output.put_line('Total Number of countries : '|| addition); FOR i in 1 .. addition LOOP dbms_output.put_line('Country: ' || country(i) || ' ,Currency : ' || cur(i)); END LOOP; END; /
Die Ausgabe des obigen Codes sollte sein:
Unterschiede zwischen Varrays und verschachtelten Tabellen
Die Unterschiede sind wie folgt:
- Während wir an einem Szenario arbeiten, in dem die Anzahl der Elemente bekannt ist und sie nacheinander angeordnet sind, werden im Allgemeinen Varrays verwendet. Ein Varray, der in einer Datenbank gespeichert ist, behält seine Indizes und Sequenzen bei. Es wird immer als einzelnes Objekt gepflegt. Die verschachtelten Tabellen werden verwendet, wenn die Anzahl der Elemente nicht eingeschränkt ist.
- Die verschachtelte Tabelle weist spärliche Eigenschaften auf, die es ihr ermöglichen, jedes Element von jeder Position und nicht immer vom Ende zu entfernen. Die Reihenfolge und der Index einer verschachtelten Tabelle werden nicht beibehalten, wenn sie in der Datenbank gespeichert wird. Die Elemente von Varray werden immer nacheinander gepflegt.
Unterschiede zwischen assoziativen Arrays und verschachtelten Tabellen
Die Unterschiede sind wie folgt:
- Verschachtelte Tabellen können in einer Spalte der Datenbank gespeichert werden, assoziative Arrays jedoch nicht. Die verschachtelten Tabellen pflegen ordnungsgemäße Datenbeziehungen, die dauerhaft gespeichert werden.
- Die assoziativen Arrays eignen sich für kleine Nachschlagetabellen, in denen die Sammlung jedes Mal im Speicher erstellt werden kann, wenn ein Paket initialisiert oder eine Prozedur aufgerufen wird. Sie sind eine gute Wahl, wenn die Größe vorher nicht bekannt ist. Die Indexwerte eines assoziativen Arrays sind flexibel, da die Indizes dieses Arrays nicht aufeinander folgen oder negativ oder eine Zeichenfolge anstelle einer Zahl sein können.
Häufig gestellte Fragen und Antworten
F # 1) Warum verwenden wir Sammlungen in PL / SQL?
Antworten: Es gibt drei Arten von Sammlungen: Verschachtelte Tabellen, Assoziative Arrays und Varrays. Die verschachtelten Tabellen können eine zufällige Anzahl von Elementen speichern. Varrays können eine feste Anzahl von Elementen speichern und die assoziativen Arrays ermöglichen es uns, Elemente mit Zufallszahlen und Zeichenfolgen zu suchen.
F # 2) Was ist die verschachtelte Tabelle in PL / SQL?
Antworten: Eine verschachtelte Tabelle ist eindimensional und ihre Größe bleibt nicht fest. Auf sie kann in SQL- und PL / SQL-Blöcken zugegriffen werden. Es kann in Datensätzen, Objektdefinitionen und Tabellen verwendet werden.
F # 3) Was ist eine Massensammlung in Oracle PL / SQL?
Antworten: Eine Massensammlung ist eine Methode zum Abrufen von Daten, wenn die PL / SQL-Engine die SQL-Engine anweist, mehrere Zeilen gleichzeitig zu akkumulieren und in einer Sammlung zu speichern.
F # 4) Warum ist das Sammeln von Massen in Oracle schneller?
Antworten: Die Massenerfassung verbessert die Leistung, indem die Interaktion zwischen der PL / SQL-Engine und der Datenbank verringert wird.
F # 5) Was ist Varray in PL / SQL?
Antworten: Es handelt sich um eine PL / SQL-Datenstruktur, mit der eine homogene Sammlung von Elementen desselben Datentyps in einer Sequenz gespeichert wird. Es wird meistens verwendet, um einen geordneten Datensatz zu speichern.
F # 6) Können wir in Oracle Elemente aus Varray löschen?
Antworten: Wir können Elemente in einem Varray nicht direkt mit Hilfe von SQL-Anweisungen ändern oder löschen. Wir müssen den Varray aus der Tabelle auswählen, ihn in PL / SQL ändern, dann die Tabelle ändern und in einem neuen Varray speichern.
F # 7) Was ist der Unterschied zwischen der verschachtelten Tabelle und Varray?
Antwort: Die Unterschiede sind unten aufgeführt:
- Wir nehmen den Varray, wenn die Anzahl der Elemente von vorher bekannt ist. Diese Einschränkung ist in verschachtelten Tabellen nicht möglich.
- In Varray werden die Elemente nacheinander verwendet. Die verschachtelte Tabelle weist sowohl dichte als auch spärliche Eigenschaften auf.
- Die Elemente werden immer in Varray bestellt. Die Elemente können in der verschachtelten Tabelle in der richtigen Reihenfolge sein oder nicht.
Fazit
In diesem Tutorial haben wir einige der grundlegenden Konzepte von PL / SQL ausführlich besprochen, die für die Entwicklung von Wissen darüber unerlässlich sind.
Wir haben die folgenden Themen behandelt:
- Grundlegendes Verständnis von PL SQL-Sammlungen (Methoden und Ausnahmen).
- Varrays.
- Verschachtelte Tabellen
- Index-by-Tabellen
<< PREV Tutorial | NÄCHSTES Tutorial >>
Literatur-Empfehlungen
- Array-Datentypen - int Array, Double Array, Array of Strings usw.
- Java Array - Wie drucke ich Elemente eines Arrays in Java?
- PL SQL Tutorial für Anfänger mit Beispielen | Was ist PL / SQL?
- Java-Array - Deklarieren, Erstellen und Initialisieren eines Arrays in Java
- Java Array Length Tutorial mit Codebeispielen
- SQL vs NoSQL Genaue Unterschiede und wissen, wann NoSQL und SQL verwendet werden müssen
- Unterschied zwischen SQL und MySQL und SQL Server (mit Beispielen)
- Verschachtelte Klasse von JUnit 5: @ Verschachteltes Lernprogramm mit Beispielen