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

So erstellen Sie assoziative Arrays in der Oracle-Datenbank

Assoziatives Array war früher als PL/SQL-Tabellen in PL/SQL 2 (PL/SQL-Version, die mit Oracle 7 geliefert wurde) und Index-by-Table in Oracle 8 Database bekannt. Nach Nested Table und VARRAYs ist Associative Array der dritte Sammlungstyp, der von Entwicklern häufig verwendet wird.

Lassen Sie uns die Antworten auf einige Fragen zu assoziativen Arrays herausfinden, die Ihnen helfen würden, sie besser zu verstehen. In diesem Abschnitt erfahren Sie auch einige der wichtigsten Unterschiede und Gemeinsamkeiten zwischen Associative Array und anderen Sammlungen wie VARRAY und Nested Tables.

Sind assoziative Arrays begrenzt oder unbegrenzt?

Ähnlich wie verschachtelte Tabellen sind Assoziative Arrays eine unbegrenzte Form der Sammlung. Dies bedeutet, dass es keine Obergrenze für die Anzahl der Elemente gibt, die es aufnehmen kann. Dasselbe gilt nicht für VARRAYs, da Variablenarrays von Natur aus begrenzt sind.

Sind assoziative Arrays persistent oder nicht persistent?

Im Gegensatz zu verschachtelten Tabellen und VARRAYs sind Assoziative Arrays eine nicht persistente Form der Sammlung . Das bedeutet, dass weder das Array noch die Daten in der Datenbank gespeichert werden können, sondern nur in PL/SQL-Blöcken verfügbar sind.

Sind assoziative Arrays spärlich oder dicht?

Während VARRAYs dicht gefüllte Arrays sind, sind Verschachtelte Tabellen und assoziative Arrays dünn besetzte Arrays was bedeutet, dass die tiefgestellte Nummerierung eindeutig, aber nicht unbedingt fortlaufend sein muss.

Können wir ein assoziatives Array als Datenbankobjekt erstellen?

Aufgrund ihrer nicht persistenten Natur können assoziative Arrays nicht im Schema gespeichert werden. Sie können nur in PL/SQL-Blöcken erstellt werden, aber nicht auf Schemaebene als Datenbankobjekt.

Können wir assoziatives Array wiederverwenden?

Wie oben erwähnt, ist ein assoziatives Array eine nicht persistente Sammlung, die nicht auf Schemaebene erstellt werden kann und daher nicht im Schema gespeichert werden kann und daher nicht wiederverwendet werden kann.

Ist die Indexnummerierung/Tiefstellennummerierung im assoziativen Array implizit oder explizit?

Im Gegensatz zu verschachtelten Tabellen und VARRAYs ist die Indizierung in assoziativen Arrays explizit. Wo Oracle Engine den Elementen der verschachtelten Tabelle und VARRAY-Sammlungen implizit im Hintergrund eine Index-/Indexnummer zuweist, müssen Benutzer in assoziativen Arrays die Indexnummer explizit angeben, während sie die Sammlung füllen.

Wie werden Daten im assoziativen Array gespeichert?

Assoziatives Array speichert Daten in Schlüssel-Wert-Paaren, wobei die Indexnummer als Schlüssel und die in der Zelle gespeicherten Daten als Wert dienen.

Dies sind einige Kernfragen, die Sie in Ihrer Prüfung oder Ihrem Vorstellungsgespräch erwarten können. Lesen Sie weiter, um die technischen Unterschiede zwischen assoziativen Arrays und anderen Sammlungen herauszufinden.

PL/SQL-Sammlung definieren – Assoziatives Array?
Unter Verwendung der aus den obigen Fragen abgeleiteten Informationen können wir Assoziative Arrays als eindimensionale, homogene Sammlung definieren, die Daten in Schlüssel-Wert-Paaren speichert. Es ist von Natur aus spärlich, unbegrenzt und nicht beständig.

Was ist die Syntax von PL/SQL Associative Array?

TYPE aArray_name IS TABLE OF element_datatype [Not Null]
INDEX BY index_elements_datatype;

Wie oben erwähnt, ist ein assoziatives Array ein nicht persistenter Sammlungstyp, daher kann es nicht als eigenständiges Datenbankobjekt erstellt werden und kann daher nicht wie der Rest der anderen Sammlungen wiederverwendet werden. Es kann nur im PL/SQL-Block verfügbar sein. Stellen Sie immer sicher, dass Sie Ihr assoziatives Array im Abschnitt DELCARATION Ihres PL/SQL-Blocks erstellen. [Lesen Sie hier, um zu erfahren, wie viele Abschnitte ein PL/SQL-Block enthält?] Sehen wir uns die Syntax im Detail an:

Typ :Schlüsselwort markiert den Beginn der Anweisung.

aArray_name :Name des assoziativen Arrays. Es ist vollständig benutzerdefiniert und entspricht den Benennungsnormen von Oracle Database.

IST TABELLE VON :Oracle Database reservierte Phrase, die den Benutzer verwendet, der dem Compiler mitteilt, welche Art von Elementen das Array enthalten wird?

Element_Datentyp :Datentyp der Elemente, die das Array enthalten wird. In Oracle Database sind alle Sammlungen von Natur aus homogen, was bedeutet, dass jedes Element der Sammlung denselben Datentyp haben muss.

Not_null :Eine optionale Klausel, die bei Verwendung sicherstellt, dass jeder Index einen entsprechenden Wert hat und nicht NULL.

INDEX NACH :Klausel, mit der der Benutzer den Datentyp des Index des Arrays angibt.

Index_elements_dataype :Datentyp der tiefgestellten Elemente des Arrays.

Beispiel:Wie erstellt man ein assoziatives Array in einer Oracle-Datenbank?

Ein assoziatives Array kann nur innerhalb eines PL/SQL-Blocks erstellt werden, daher ist sein Geltungsbereich auf den Block beschränkt, in dem es erstellt wird, was bedeutet, dass es nicht außerhalb dieses Blocks verwendet werden kann. Mal sehen, wie man ein assoziatives Array in Oracle Database erstellt?

Schritt 1:Assoziatives Array erstellen

	SET SERVEROUTPUT ON;
	DECLARE
	    TYPE books IS TABLE OF NUMBER
	        INDEX BY VARCHAR2 (20);

Im obigen Code haben wir ein assoziatives Array mit dem Namen „Books“ erstellt ’, die Elemente von NUMBER Datentypen und Indizes des Datentyps VARCHAR2 enthalten kann.

Schritt 2:Assoziative Array-Variable erstellen

Isbn Books;

Sie benötigen eine assoziative Array-Variable, um das Array im Programm zu referenzieren. Array-Variablen können sehr einfach erstellt werden. Sie müssen nur den Namen der Variablen schreiben (also „isbn“ in unserem Fall), der benutzerdefiniert ist, gefolgt vom Namen des assoziativen Arrays.

Schritt 3:Daten in das assoziative Array einfügen

Wie oben erwähnt, enthält ein assoziatives Array Daten in Schlüssel-Wert-Paaren. Daher müssen die Benutzer im Gegensatz zu den anderen Sammlungen sowohl den Index des Arrays (den Schlüssel) als auch die Daten einfügen.

BEGIN
-- How to insert data into the associative array 
isbn('Oracle Database') := 1234;
isbn('MySQL') := 9876; 

Wie verschachtelte Tabellen und VARRAYs fügen wir Daten in das assoziative Array im Ausführungsabschnitt des PL/SQL-Blocks ein. Wenn Sie hier bemerkt haben, dass wir hier im Gegensatz zu anderen Sammlungen nicht die INSERT-DML-Anweisung zum Einfügen der Daten verwendet haben, sondern sie mit der Array-Variablen „isbn“ eingefügt haben . Unten sehen Sie die Syntax der Einfügeanweisung für ein assoziatives Array unter Verwendung einer Array-Variablen.

Array_variable (subscript/key) := data; 

Wie Sie sehen können, müssen Sie zum Einfügen der Daten in das assoziative Array zuerst den Namen der Array-Variablen schreiben, gefolgt vom Index des Arrays und dann den Daten für Ihr Array.

Schritt 4:Wie aktualisiere ich die Daten der Sammlung – Assoziatives Array?

Das Aktualisieren von Werten eines assoziativen Arrays ist so einfach wie das Einfügen. Wenn Sie einen beliebigen Wert ändern möchten, schreiben Sie dieselbe Anweisung, die zum Einfügen mit den geänderten Werten verwendet wird. Angenommen, Sie möchten den Wert für den Schlüssel MySQL von 9876 auf 1010 ändern, dann schreiben Sie einfach

	-- How to update data of associative array.	
	 	isbn('MySQL') := 1010; 

Auch hier müssen Sie die UPDATE-DML nicht schreiben, um die Werte zu aktualisieren. Sie verwenden einfach die Array-Variable.

Schritt 5:Wie werden Daten aus dem Collection-Associative-Array abgerufen?

So wie wir keine DML-Anweisung einfügen zum Einfügen von Werten oder DML aktualisieren zum Aktualisieren von Werten benötigen, brauchen wir auch keine DML auswählen zum Abrufen von Werten.

Angenommen, Sie möchten den Wert sehen, der für den Schlüssel „Oracle Database“ gespeichert ist. Dazu müssen Sie nur schreiben…

-- how to retrieve data using key from associative array.  	
	  DBMS_OUTPUT.PUT_LINE ('Value '||isbn ('Oracle Database'));

Kombinieren wir all diese Code-Blöcke in einem einzigen Programm.

SET SERVEROUTPUT ON;
DECLARE
    TYPE books IS TABLE OF NUMBER
        INDEX BY VARCHAR2(20);
    isbn Books;
BEGIN
    	-- How to insert data into the associative array 
    	isbn('Oracle Database') := 1234;
    	isbn('MySQL') := 9876;
    	DBMS_OUTPUT.PUT_LINE('Value Before Updation '||isbn('MySQL'));

    	-- How to update data of associative array.
    	isbn('MySQL') := 1010;
    
-- how to retrieve data using key from associative array.  
    	DBMS_OUTPUT.PUT_LINE('Value After Updation '||isbn('MySQL'));
END;
/

Hier ist das Programm mit einigen geringfügigen Änderungen. Das obige PL/SQL-Programm zeigt, wie Sie einen bestimmten Wert mithilfe des Schlüssels abrufen. Sie können sich das Video-Tutorial ansehen, um zu erfahren, wie Sie alle Werte aus dem assoziativen Array mithilfe von Schleifen abrufen. Dort habe ich es ausführlich erklärt.

Bevor Sie dieses Tutorial beenden, gibt es einige Hinweise, die Sie meiner Meinung nach kennen sollten. Diese Zeiger sind –

  • PL/SQL Associative Array unterstützt BINARY_INTEGER, PLS_INTEGER, POSITIVE, NATURAL, SIGNTYPE oder VARCHAR2 als Indexdatentyp.
  • RAW, NUMBER, LONG-ROW, ROWID und CHAR sind nicht unterstützte Indexdatentypen.

Im Fall von Element Datatype unterstützt die PL/SQL-Sammlung Associative Array –

  • Skalarer PL/SQL-Datentyp :DATE, BLOB, CLOB, BOOLEAN oder NUMBER &VARCHAR2 mit ihren Untertypen.
  • Abgeleitete Daten :Bezeichnung für solche Datentypen, die von einer Tabellenspalte, einem Cursor-Ausdruck oder einer vordefinierten Paketvariable geerbt werden
  • Benutzerdefinierter Typ: Ein Objekttyp oder Sammlungstyp, der benutzerdefiniert ist.

Das ist ein ausführliches Tutorial zu PL/SQL Collection – Associative Array. Dieses Tutorial behandelt alle Themen, die Sie in der Oracle Database-Zertifizierungsprüfung sowie im Interview erwarten können. Ich hoffe, das Lesen hat Ihnen Spaß gemacht.

Sie können anderen helfen, etwas Neues zu lernen, und uns helfen, mehr Menschen zu erreichen, indem Sie diesen Blog in Ihren sozialen Netzwerken teilen. Vergessen Sie nicht, uns zu markieren, denn wir lieben es, all unseren Unterstützern, Zuschauern und Abonnenten laute Shout-outs zu geben. Vielen Dank und einen schönen Tag!