sql >> Databasteknik >  >> RDS >> Oracle

Hur man skapar associativa arrayer i Oracle Database

Associativ array är tidigare känd som PL/SQL-tabeller i PL/SQL 2 (PL/SQL-version som kom med Oracle 7) och Index-by-Table i Oracle 8 Database. Efter Nested Table och VARRAYs är Associative Array den tredje typen av samling som används i stor utsträckning av utvecklare.

Låt oss ta reda på svaren på några frågor om associativ array som skulle hjälpa dig att förstå dem bättre. I det här avsnittet kommer du också att ta reda på några av de centrala skillnaderna och likheterna mellan Associative Array och andra samlingar som VARRAY &Nested Tables.

Är associativa arrayer begränsade eller ogränsade?

I likhet med kapslade tabeller är Associativa arrayer en ogränsad form av samling. Det betyder att det inte finns någon övre gräns för antalet element som den kan hålla. Detsamma gäller inte för VARRAYs eftersom variabla matriser är avgränsade i naturen.

Är associativa arrayer beständiga eller icke-beständiga?

Till skillnad från kapslade tabeller och VARRAYs är Associativa arrayer en icke-beständig form av insamling . Detta innebär att varken matrisen eller data kan lagras i databasen utan de är endast tillgängliga i PL/SQL-block.

Är associativa arrayer glesa eller täta?

Medan VARRAYs är tätbefolkade arrayer, är Inkapslade tabeller och associativa arrayer glest befolkade arrayer vilket innebär att sänkt numrering måste vara unik men inte nödvändigtvis sekventiell.

Kan vi skapa associativ array som databasobjekt?

På grund av deras icke-beständiga karaktär kan associativa arrayer inte lagras i schemat. De kan bara skapas i PL/SQL-block men inte på schemanivå som databasobjekt.

Kan vi återanvända associativ array?

Som nämnts ovan är Associativ array en icke-beständig samling som inte kan skapas på schemanivå och kan därför inte lagras i schemat och kan därför inte återanvändas.

Är indexnumrering/Subscript numrering i Associative array implicit eller explicit?

Till skillnad från kapslade tabeller och VARRAYs är indexering i associativ array explicit. Där Oracle Engine tilldelar nedsänkt/indexnummer till elementen i den kapslade tabellen och VARRAY-samlingarna implicit i bakgrunden, måste användare i associativ matris ange indexnumret explicit när de fyller i samlingen.

Hur lagras data i den associativa arrayen?

Associativ array lagrar data i nyckel-värdepar där indexnummer fungerar som nyckel och data som lagras i cellen fungerar som värde.

Det här är några centrala frågor som du kan förvänta dig i din tentamen eller intervju. Läs med för att ta reda på de tekniska skillnaderna mellan associativa arrayer och andra samlingar.

Definiera PL/SQL Collection – Associative Array?
Med hjälp av informationen från ovanstående frågor kan vi definiera associativa arrayer som endimensionell, homogen samling som lagrar data i nyckel-värdepar. Den är gles, obegränsad och icke-beständig till sin natur.

Vad är syntaxen för PL/SQL Associative Array?

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

Som sagt ovan Associativ array är en icke-beständig typ av samling, så den kan inte skapas som fristående databasobjekt och kan därför inte återanvändas som resten av de andra samlingarna. Det kan endast vara tillgängligt i PL/SQL-block. Se alltid till att du skapar din associativa array i DELCARATION-delen av ditt PL/SQL-block. [Läs här för att veta hur många sektioner det finns i PL/SQL-blocket?] Låt oss se syntaxen i detalj:

Typ :Nyckelord markerar början av påståendet.

aArray_name :Namn på den associativa arrayen. Den är helt användardefinierad och följer Oracle Database-namnnormer.

ÄR TABELL ÖVER :Reserverad fras i Oracle Database med vilken användare som talar om för kompilatorn vilken typ av element arrayen kommer att innehålla?

Element_Datatype :Datatyp för de element som arrayen kommer att innehålla. I Oracle Database är alla samlingar homogena till sin natur, vilket innebär att varje element i samlingen måste vara av samma datatyp.

Not_null :En valfri klausul, som om den används ser till att varje index har ett värde som motsvarar det snarare än en NULL.

INDEXERA EFTER :Klausul som använder vilken användare som anger datatypen för arrayens nedsänkta skript.

Index_elements_dataype :Datatyp för arrayens nedsänkta element.

Exempel:Hur skapar man associativ array i Oracle-databasen?

Associativ array kan bara skapas inuti ett PL/SQL-block, så dess omfattning är begränsad till blocket där den skapas, vilket betyder att den inte kan användas utanför det blocket. Låt oss se hur man skapar en associativ array i Oracle Database?

Steg 1:Skapa associativ array

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

I koden ovan skapade vi en associativ array med namnet "Böcker ’ som kan innehålla element av NUMBER datatyper och subscript av VARCHAR2 datatype.

Steg 2:Skapa associativ matrisvariabel

Isbn Books;

Du behöver en associativ arrayvariabel för att referera till arrayen i programmet. Arrayvariabel kan skapas mycket enkelt. Du behöver bara skriva namnet på variabeln (som är 'isbn' i vårt fall) som är användardefinierad följt av namnet på den associativa arrayen.

Steg 3:Infoga data i den associativa arrayen

Som nämnts ovan innehåller Associativ array data i nyckel-värdepar. Så till skillnad från resten av de andra samlingarna måste användarna infoga både subskriptet för arrayen (nyckeln) och data.

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

Liksom kapslade tabeller och VARRAYs infogar vi data i den associativa arrayen i exekveringssektionen av PL/SQL-blocket. Om du märkte här, till skillnad från andra samlingar, använde vi inte INSERT DML-satsen för att infoga data, istället infogade vi den med hjälp av Array-variabeln 'isbn' . Nedan kan du se syntaxen för insert-satsen för associativ array som använder arrayvariabel.

Array_variable (subscript/key) := data; 

Som du kan se för att infoga data i den associativa arrayen måste du först skriva namnet på arrayvariabeln följt av arrayens subscript och sedan data för din array.

Steg 4:Hur uppdaterar man insamlingsdata – Associativ array?

Att uppdatera värden för associativ array är lika enkelt som att infoga dem. Om du vill ändra något värde skriv samma sats som används för att infoga med de modifierade värdena. Säg till exempel att du vill ändra värdet mot nyckeln MySQL från 9876 till 1010 så skriver du bara

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

Återigen behöver du inte skriva UPDATE DML för att uppdatera värdena. Du använder helt enkelt arrayvariabeln.

Steg 5:Hur hämtar man data från samlings-associativ array?

Precis som vi inte behöver Insert DML-sats för att infoga värden eller Uppdatera DML för att uppdatera värden behöver vi inte Välj DML för att hämta värden.

Anta att du vill se värdet lagrat mot nyckeln "Oracle Database". För det behöver du bara skriva...

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

Låt oss kombinera alla dessa kodbitar till ett enda 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;
/

Här är programmet med några minutändringar. Ovanstående PL/SQL-program visar hur man hämtar ett specifikt värde med hjälp av nyckeln. Du kan titta på videohandledningen för att lära dig hur du hämtar alla värden från Associative Array med loopar. Där har jag förklarat det mycket detaljerat.

Innan du avslutar den här handledningen finns det några tips som jag tycker du bör känna till. Dessa pekare är –

  • PL/SQL Associative Array-stöd BINARY_INTEGER, PLS_INTEGER, POSITIVE, NATURAL, SIGNTYPE eller VARCHAR2 som indexdatatyp.
  • RAW, NUMBER, LONG-ROW, ROWID och CHAR är indexdatatyper som inte stöds.

I händelse av Element Datatype, PL/SQL-samling Associative Array Supports –

  • PL/SQL skalär datatyp :DATUM, BLOB, CLOB, BOOLEAN eller NUMBER &VARCHAR2 med sina undertyper.
  • Indikerad data :Term som används för sådana datatyper som ärvs från en tabellkolumn, marköruttryck eller fördefinierad paketvariabel
  • Användardefinierad typ: En objekttyp eller samlingstyp som är användardefinierad.

Det är en detaljerad handledning om PL/SQL Collection – Associative Array. Denna handledning täcker alla ämnen som du kan förvänta dig i Oracle Database Certification Exam såväl som i intervju. Hoppas du tyckte om att läsa.

Du kan hjälpa andra att lära sig något nytt och hjälpa oss att nå ut till fler människor genom att dela den här bloggen på dina sociala nätverk. Glöm inte att tagga oss för vi älskar att ge högljudda shout-outs till alla våra supportrar, tittare och prenumeranter. Tack och ha en bra dag!


  1. Problem när man jämför resultatet av to_char(myDate, 'DAY') med en sträng

  2. Hur man ställer in asynkron replikering mellan MySQL Galera-kluster

  3. Hur man skapar en sammansatt primär nyckel i MySQL

  4. Få sista infognings-id efter en förberedd bilaga med PDO