sql >> Database teknologi >  >> RDS >> Oracle

Sådan opretter du associative arrays i Oracle-databasen

Associative array er tidligere kendt som PL/SQL-tabeller i PL/SQL 2 (PL/SQL-version, som fulgte med Oracle 7) og Index-by-Table i Oracle 8-databasen. Efter Nested Table og VARRAYs er Associative Array den tredje type samling, som er meget brugt af udviklere.

Lad os finde ud af svarene på et par spørgsmål om associative array, som ville hjælpe dig med at forstå dem bedre. I dette afsnit vil du også finde ud af nogle af de centrale forskelle og ligheder mellem Associative Array og andre samlinger såsom VARRAY &Nested Tables.

Er associative arrays afgrænset eller ubegrænset?

I lighed med indlejrede tabeller er Associative arrays en ubegrænset form for samling. Det betyder, at der ikke er nogen øvre grænse for antallet af elementer, den kan indeholde. Det samme gælder ikke for VARRAY'er, da variable arrays er afgrænset i naturen.

Er associative arrays vedvarende eller ikke-vedvarende?

I modsætning til indlejrede tabeller og VARRAY'er er Associative arrays ikke-vedvarende form for indsamling . Dette betyder, at hverken arrayet eller dataene kan gemmes i databasen, men de er kun tilgængelige i PL/SQL-blokke.

Er associative arrays sparsomme eller tætte?

Mens VARRAY'er er tæt befolkede arrays, er Indlejrede tabeller og associative arrays tyndt befolkede arrays hvilket betyder, at sænket nummerering skal være unik, men ikke nødvendigvis sekventiel.

Kan vi oprette Associative array som databaseobjekt?

På grund af deres ikke-vedvarende natur kan associative arrays ikke gemmes i skemaet. De kan kun oprettes i PL/SQL-blokke, men ikke på skemaniveau som databaseobjekt.

Kan vi genbruge associativ array?

Som nævnt ovenfor er Associative array en ikke-vedvarende samling, som ikke kan oprettes på skemaniveau, og den kan derfor ikke gemmes i skemaet og kan derfor ikke genbruges.

Er indeksnummerering/underskriftsnummerering i Associative array implicit eller eksplicit?

I modsætning til indlejrede tabeller og VARRAY'er er indeksering i Associative array eksplicit. Hvor Oracle Engine tildeler subscript/indeksnummer til elementerne i den indlejrede tabel og VARRAY-samlinger implicit i baggrunden, skal brugere i associative array angive indeksnummeret eksplicit, mens samlingen udfyldes.

Hvordan bliver data gemt i det associative array?

Associativ array gemmer data i nøgle-værdi-par, hvor indeksnummer fungerer som nøglen, og data gemt i cellen tjener som værdi.

Dette er et par kernespørgsmål, som du kan forvente i din eksamen eller samtale. Læs med for at finde ud af de tekniske forskelle mellem Associative arrays og andre samlinger.

Definer PL/SQL Collection – Associative Array?
Ved at bruge informationen fra ovenstående spørgsmål kan vi definere Associative Arrays som en-dimensionel, homogen samling, som gemmer data i nøgleværdi-par. Det er sparsomt, ubegrænset og ikke-vedholdende i naturen.

Hvad er syntaksen for PL/SQL Associative Array?

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

Som nævnt ovenfor er Associative array en ikke-vedvarende type samling, så den kan ikke oprettes som et selvstændigt databaseobjekt og kan derfor ikke genbruges som resten af ​​de andre samlinger. Det kan kun være tilgængeligt i PL/SQL-blok. Sørg altid for at oprette dit associative array i DELCARATION-sektionen af ​​din PL/SQL-blok. [Læs her for at vide, hvor mange sektioner der er i PL/SQL-blokken?] Lad os se syntaksen i detaljer:

Typ :Nøgleord markerer begyndelsen af ​​udsagnet.

aArray_name :Navn på det associative array. Det er fuldstændig brugerdefineret og overholder Oracle Database-navnenormer.

ER TABEL OVER :Oracle Database reserveret sætning ved hjælp af hvilken bruger fortæller compileren, hvilken type elementer arrayet skal indeholde?

Element_Datatype :Datatype for de elementer, arrayet skal indeholde. I Oracle Database er alle samlingerne homogene, hvilket betyder, at hvert element i samlingen skal være af samme datatype.

Not_null :En valgfri klausul, som, hvis den bruges, sikrer, at hvert indeks har en værdi, der svarer til det i stedet for en NULL.

INDEKSER EFTER :Klausul, der bruger hvilken bruger der specificerer datatypen for arrayets subscript.

Index_elements_dataype :Datatype for arrayets sænkede elementer.

Eksempel:Hvordan oprettes associativt array i Oracle-databasen?

Associativ array kan kun oprettes inde i en PL/SQL-blok, så dens omfang er begrænset til den blok, hvori den er oprettet, hvilket betyder, at den ikke kan bruges uden for denne blok. Lad os se, hvordan man opretter et associativt array i Oracle-databasen?

Trin 1:Opret Associative Array

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

I ovenstående kode oprettede vi et associativt array med navnet 'Bøger ’ som kan indeholde elementer af NUMBER datatyper og subscript af VARCHAR2 datatype.

Trin 2:Opret Associative Array Variable

Isbn Books;

Du skal bruge en associativ array-variabel til at referere til arrayet i programmet. Array-variabel kan oprettes meget nemt. Du skal bare skrive navnet på variablen (som er 'isbn' i vores tilfælde), som er brugerdefineret efterfulgt af navnet på det associative array.

Trin 3:Indsæt data i det associative array

Som nævnt ovenfor indeholder Associative array data i nøgle-værdi-par. I modsætning til resten af ​​de andre samlinger skal brugerne således indsætte både subscriptet af arrayet (nøglen) og dataene.

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

Ligesom indlejrede tabel og VARRAY'er indsætter vi data i det associative array i udførelsessektionen af ​​PL/SQL-blokken. Hvis du bemærkede her, i modsætning til andre samlinger, brugte vi ikke INSERT DML-sætningen til at indsætte dataene, men vi indsatte den ved hjælp af Array-variablen 'isbn' . Nedenfor kan du se syntaksen for insert-sætning for associativ array ved hjælp af array-variabel.

Array_variable (subscript/key) := data; 

Som du kan se for at indsætte dataene i det associative array, skal du først skrive navnet på arrayvariablen efterfulgt af arrayets subscript og derefter dataene for dit array.

Trin 4:Hvordan opdaterer man indsamlingsdataene – Associativ array?

Opdatering af værdier for Associative array er lige så let som at indsætte dem. Hvis du vil ændre en værdi, skriv den samme sætning, som bruges til indsættelse med de ændrede værdier. Sig for eksempel, at du vil ændre værdien mod nøglen MySQL fra 9876 til 1010, så skriver du bare

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

Igen behøver du ikke at skrive UPDATE DML for at opdatere værdierne. Du bruger blot array-variablen.

Trin 5:Hvordan henter man data fra Collection-Associative-arrayet?

Ligesom vi ikke har brug for Indsæt DML-sætning for at indsætte værdier eller Opdater DML for at opdatere værdier, har vi heller ikke brug for Vælg DML til at hente værdier.

Antag, at du vil se værdien gemt mod nøglen 'Oracle Database'. For det skal du bare skrive...

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

Lad os kombinere alle disse bidder af kode i et enkelt program.

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

Her er programmet med nogle minutændringer. Ovenstående PL/SQL-program viser, hvordan man henter en bestemt værdi ved hjælp af tasten. Du kan se videovejledningen for at lære, hvordan du henter alle værdierne fra Associative Array ved hjælp af Loops. Der har jeg forklaret det meget detaljeret.

Før du afslutter denne tutorial, er der nogle få tips, som jeg synes, du bør kende. Disse pointer er –

  • PL/SQL Associative Array understøtter BINARY_INTEGER, PLS_INTEGER, POSITIVE, NATURAL, SIGNTYPE eller VARCHAR2 som indeksdatatype.
  • RAW, NUMBER, LONG-ROW, ROWID og CHAR er ikke-understøttede indeksdatatyper.

I tilfælde af Element Datatype understøtter PL/SQL-samling Associative Array –

  • PL/SQL skalær datatype :DATO, BLOB, CLOB, BOOLEAN eller NUMBER &VARCHAR2 med deres undertyper.
  • Udledte data :Begreb, der bruges til sådanne datatyper, der er nedarvet fra en tabelkolonne, markørudtryk eller foruddefineret pakkevariabel
  • Brugerdefineret type: En objekttype eller samlingstype, som er brugerdefineret.

Det er en detaljeret tutorial om PL/SQL Collection – Associative Array. Denne vejledning dækker alle de emner, som du kan forvente i Oracle Database Certification Exam såvel som i interview. Håber du nød at læse.

Du kan hjælpe andre med at lære noget nyt samt hjælpe os med at nå ud til flere mennesker ved at dele denne blog på dine sociale netværk. Glem ikke at tagge os, fordi vi elsker at give høje Shout-outs til alle vores tilhængere, seere og abonnenter. Tak og god dag!


  1. Sådan importerer og eksporterer man en database via phpMyAdmin ('Adgang nægtet oprette database db_name' fejl)

  2. Hvad er den aktuelle visning af APPL_TOP snapshots

  3. Hurtigste måde at afgøre, om posten eksisterer

  4. Sådan fungerer SQLite Ltrim()