sql >> Database >  >> RDS >> Oracle

Hoe associatieve arrays in Oracle Database te maken

Associatieve array is voorheen bekend als PL/SQL-tabellen in PL/SQL 2 (PL/SQL-versie die bij Oracle 7 werd geleverd) en Index-by-Table in Oracle 8 Database. Na Nested Table en VARRAY's is Associative Array het derde type verzameling dat veel wordt gebruikt door ontwikkelaars.

Laten we eens kijken naar de antwoorden op een paar vragen over associatieve arrays, zodat u ze beter kunt begrijpen. In dit gedeelte vindt u ook enkele van de belangrijkste verschillen en overeenkomsten tussen Associative Array en andere collecties zoals VARRAY en geneste tabellen.

Zijn associatieve arrays begrensd of onbegrensd?

Net als bij geneste tabellen, zijn Associatieve arrays een onbeperkte vorm van verzameling. Dit betekent dat er geen bovengrens is voor het aantal elementen dat het kan bevatten. Hetzelfde geldt niet voor VARRAY's, aangezien variabele arrays van nature begrensd zijn.

Zijn associatieve arrays persistent of niet-persistent?

In tegenstelling tot geneste tabellen en VARRAY's, zijn Associatieve arrays een niet-permanente vorm van verzameling . Dit betekent dat noch de array, noch de gegevens in de database kunnen worden opgeslagen, maar dat ze alleen beschikbaar zijn in PL/SQL-blokken.

Zijn associatieve arrays schaars of compact?

Terwijl VARRAY's dichtbevolkte arrays zijn, zijn Geneste tabellen en associatieve arrays dunbevolkte arrays wat betekent dat subscriptnummering uniek moet zijn, maar niet noodzakelijk opeenvolgend.

Kunnen we een associatieve array maken als database-object?

Vanwege hun niet-persistente aard kunnen associatieve arrays niet in het schema worden opgeslagen. Ze kunnen alleen in PL/SQL-blokken worden gemaakt, maar niet op schemaniveau als databaseobject.

Kunnen we associatieve array hergebruiken?

Zoals hierboven vermeld, is associatieve array een niet-permanente verzameling die niet op schemaniveau kan worden gemaakt en dus niet in het schema kan worden opgeslagen en daarom niet opnieuw kan worden gebruikt.

Is indexnummering/Subscript-nummering in associatieve array impliciet of expliciet?

In tegenstelling tot geneste tabellen en VARRAY's is indexering in associatieve arrays expliciet. Waar Oracle Engine subscript/indexnummer toewijst aan de elementen van de geneste tabel en VARRAY-verzamelingen impliciet op de achtergrond, moeten gebruikers in associatieve arrays het indexnummer expliciet specificeren tijdens het vullen van de verzameling.

Hoe worden gegevens opgeslagen in de associatieve array?

Associatieve array slaat gegevens op in sleutel-waarde-paren waarbij het indexnummer als sleutel dient en gegevens die in de cel zijn opgeslagen als waarde dienen.

Dit zijn een paar kernvragen die je kunt verwachten in je examen of sollicitatiegesprek. Lees verder om de technische verschillen tussen associatieve arrays en andere collecties te ontdekken.

Definieer PL/SQL-verzameling – associatieve array?
Met behulp van de informatie die is afgeleid van bovenstaande vragen, kunnen we associatieve arrays definiëren als eendimensionale, homogene verzameling die gegevens opslaat in een sleutel-waardepaar. Het is schaars, grenzeloos en niet-persistent van aard.

Wat is de syntaxis van PL/SQL Associative Array?

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

Zoals hierboven vermeld, is de associatieve array een niet-persistent type verzameling, dus het kan niet worden gemaakt als een op zichzelf staand database-object en kan daarom niet opnieuw worden gebruikt zoals de rest van de andere verzamelingen. Het kan alleen beschikbaar zijn in PL/SQL-blok. Zorg er altijd voor dat u uw associatieve array aanmaakt in de sectie DELCARATION van uw PL/SQL-blok. [Lees hier om te weten hoeveel secties er zijn in het PL/SQL-blok?] Laten we de syntaxis in detail bekijken:

Type :Trefwoord markeert het begin van de verklaring.

aArray_name :Naam van de associatieve array. Het is volledig door de gebruiker gedefinieerd en voldoet aan de naamgevingsnormen van Oracle Database.

IS TABEL VAN :Oracle Database gereserveerde zin met behulp van welke gebruiker vertelt de compiler welk type elementen de array zal bevatten?

Element_Datatype :Datatype van de elementen die de array zal bevatten. In Oracle Database zijn alle collecties homogeen van aard, wat betekent dat elk element van de collectie van hetzelfde datatype moet zijn.

Not_null :Een optionele clausule die, indien gebruikt, ervoor zorgt dat elke index een waarde heeft die ermee overeenkomt in plaats van een NULL.

INDEX DOOR :Clausule die de gebruiker gebruikt om het datatype van het subscript van de array op te geven.

Index_elements_datatype :Datatype van de subscript-elementen van de array.

Voorbeeld:hoe maak je een associatieve array in Oracle Database?

Associatieve arrays kunnen alleen binnen een PL/SQL-blok worden gemaakt, dus het bereik is beperkt tot het blok waarin het is gemaakt, wat betekent dat het niet buiten dat blok kan worden gebruikt. Laten we eens kijken hoe we een associatieve array in Oracle Database kunnen maken?

Stap 1:maak een associatieve array

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

In de bovenstaande code hebben we een associatieve array gemaakt met de naam 'Boeken ' die elementen van NUMBER datatypes en subscript van VARCHAR2 datatype kan bevatten.

Stap 2:maak een associatieve array-variabele

Isbn Books;

U hebt een associatieve array-variabele nodig om naar de array in het programma te verwijzen. Een arrayvariabele kan heel eenvoudig worden gemaakt. Je hoeft alleen maar de naam van de variabele te schrijven (dat is 'isbn' in ons geval) die door de gebruiker is gedefinieerd, gevolgd door de naam van de associatieve array.

Stap 3:gegevens invoegen in de associatieve array

Zoals hierboven vermeld, bevat associatieve array gegevens in sleutel-waardeparen. Dus in tegenstelling tot de rest van de andere collecties moeten de gebruikers zowel het subscript van de array (de sleutel) als de gegevens invoegen.

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

Net als geneste tabellen en VARRAY's voegen we gegevens in de associatieve array in de uitvoeringssectie van het PL/SQL-blok in. Als je hier hebt opgemerkt, in tegenstelling tot andere collecties, hebben we de INSERT DML-instructie niet gebruikt voor het invoegen van de gegevens, maar hebben we deze ingevoegd met behulp van de Array-variabele 'isbn' . Hieronder ziet u de syntaxis van de insert-instructie voor associatieve array met behulp van arrayvariabele.

Array_variable (subscript/key) := data; 

Zoals je kunt zien, moet je om de gegevens in de associatieve array in te voegen eerst de naam van de arrayvariabele schrijven, gevolgd door het subscript van de array en vervolgens de gegevens voor je array.

Stap 4:Hoe de gegevens van de verzameling bijwerken - Associatieve array?

Het bijwerken van de waarden van de associatieve array is net zo eenvoudig als het invoegen ervan. Als u een waarde wilt wijzigen, schrijft u dezelfde instructie die wordt gebruikt voor invoeging met de gewijzigde waarden. Stel bijvoorbeeld dat u de waarde wilt wijzigen tegen de sleutel MySQL van 9876 in 1010, dan schrijft u gewoon

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

Nogmaals, u hoeft de UPDATE DML niet te schrijven om de waarden bij te werken. Je gebruikt gewoon de array-variabele.

Stap 5:Hoe kan ik gegevens ophalen uit de Collection-Associative array?

Net zoals we geen DML-instructie invoegen nodig hebben om waarden in te voegen of DML bijwerken om waarden bij te werken, hebben we Select DML niet nodig om waarden op te halen.

Stel dat u de waarde wilt zien die is opgeslagen tegen de sleutel 'Oracle Database'. Daarvoor hoef je alleen maar te schrijven...

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

Laten we al deze stukjes code combineren in een enkel programma.

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 is het programma met enkele kleine aanpassingen. Het bovenstaande PL/SQL-programma laat zien hoe u een specifieke waarde kunt ophalen met behulp van de sleutel. U kunt de video-tutorial bekijken om te leren hoe u alle waarden uit Associative Array kunt ophalen met behulp van Loops. Daar heb ik het tot in detail uitgelegd.

Voordat u deze tutorial afsluit, zijn er enkele tips die u volgens mij moet weten. Deze aanwijzingen zijn –

  • PL/SQL Associative Array-ondersteuning BINARY_INTEGER, PLS_INTEGER, POSITIVE, NATURAL, SIGNTYPE of VARCHAR2 als indexgegevenstype.
  • RAW, NUMBER, LONG-ROW, ROWID en CHAR zijn niet-ondersteunde indexgegevenstypen.

In het geval van Element Datatype, ondersteunt PL/SQL-verzameling Associatieve matrix –

  • PL/SQL scalair gegevenstype :DATE, BLOB, CLOB, BOOLEAN of NUMBER &VARCHAR2 met hun subtypes.
  • Afgeleide gegevens :term die wordt gebruikt voor dergelijke gegevenstypen die zijn overgenomen van een tabelkolom, cursoruitdrukking of vooraf gedefinieerde pakketvariabele
  • Door de gebruiker gedefinieerd type: Een objecttype of verzamelingstype dat door de gebruiker is gedefinieerd.

Dat is een gedetailleerde tutorial over PL/SQL Collection – Associative Array. Deze tutorial behandelt alle onderwerpen die u kunt verwachten in het Oracle Database Certification Exam en in Interview. Ik hoop dat je het leuk vond om te lezen.

Je kunt anderen helpen iets nieuws te leren en ons helpen om meer mensen te bereiken door deze blog op je sociale netwerken te delen. Vergeet ons niet te taggen want we houden ervan om luide Shout-outs te geven aan al onze supporters, kijkers en abonnees. Bedankt en een fijne dag verder!


  1. Overzicht van server-side programmering in PostgreSQL

  2. PostgreSQL 9.2 JDBC-stuurprogramma gebruikt de tijdzone van de client?

  3. Een back-up maken van MySQL-databases met AutoMySQLBackup

  4. Beste manier om te controleren op lege of null-waarde