sql >> Databasteknik >  >> RDS >> Oracle

Insamlingsmetod:Utöka procedur i Oracle Database

Efter PL/SQL Collection Method DELETE, EXTEND-proceduren i Oracle-databasen är den andra på listan. Vi har använt denna procedur gång på gång men aldrig fått chansen att utforska den i detalj. Därför har jag bestämt mig för att ägna hela bloggen åt denna samlingsmetod. Så luta dig tillbaka och njut av bloggen.

Om du är ny på PL/SQL och inte vet vad procedurer är så har vi en handledning för dig. Klicka här och lär dig allt om PL/SQL-procedurer i Oracle Database.

Vad är PL/SQL Collection Method EXTEND?

I likhet med DELETE är samlingsmetoden EXTEND en överbelastad PL/SQL-procedur som används för att lägga till element till samlingen.

På hur många sätt kan vi anropa EXTEND-proceduren i Oracle Database?

PL/SQL-insamlingsprocedur är en överbelastad procedur. Därför betyder det att vi kallar samma procedur på olika sätt. Dessa olika sätt att anropa Collection Procedure EXTEND är –

  1. Utöka:Utöka proceduranrop utan några argument.

Anropande av PL/SQL Collection-procedur Förläng utan argument läggs till ett enda NULL-element till samlingen.

  1. Utöka (n):Utöka proceduranropet med ett argument.

Insamlingsprocedur Utöka med ett argument kommer att lägga till antalet NULL-element som du nämnde som argumentet för proceduren . Men kom ihåg att argumentet måste vara ett giltigt heltalsvärde.

  1. Utöka (n, v):Utöka proceduranropet med två argument.

I det här fallet anger det första argumentet antalet element som kommer att läggas till samlingen. Dessutom t det andra argumentet är indexnumret. Dessutom kommer dess värde att kopieras och tilldelas vart och ett av de nyligen bifogade elementen i samlingen. Denna form av EXTEND krävs för samlingar med "inte null-element".

Kan vi använda PL/SQL Collection Method EXTEND med alla tre typer av samlingar?

Nej, insamlingsmetoden EXTEND kan endast tillämpas på insamlingskapslade tabeller och VARRAYs. Dessutom kan EXTEND inte användas med samlingsassociativa arrayer.

Kan du visa oss specifikationen för proceduren för insamlingsmetod EXTEND i Oracle Database?

Visst varför inte! Här är de överbelastade specifikationerna för PL/SQL Collection Method EXTEND —

FÖLJ förfarande med ett argument:

PROCEDURE EXTEND (n pls_integer := 1);

Insamlingsmetod Utökad med två argument:

PROCEDURE EXTEND (n pls_integer, v pls_integer);

När ska vi använda insamlingsmetoden EXTEND i vår kod?

När du har en samling (antingen Nested Table eller VARRAY) i din kod som inte initieras med tillräckligt antal element. I så fall måste du först använda PL/SQL Collection Method EXTEND.

Vad är kravet på PL/SQL-insamlingsmetoden EXTEND?

Deklarera, definiera och initiera är de tre steg som vi måste gå igenom när vi arbetar med insamling i Oracle Database. Men innan vi lagrar data i indexet måste vi skapa en minnesplats för den. Följaktligen hjälper PL/SQL Collection-proceduren EXTEND oss att skapa den minnesplatsen för den datan.

Vad händer om vi har tagit bort eller trimmat slutet av samlingen?

I så fall kommer PL/SQL Collection-metoden EXTEND att hoppa över de raderade elementen när den tilldelar ett nytt index.

Vad händer om jag använder insamlingsmetoden EXTEND på en oinitierad kapslad tabell eller VARRAY?

Om PL/SQL Collection Method EXTEND tillämpas på en oinitierad samling kommer den att visa en COLLECTION_IS_NULL undantag.

Och vad händer om jag försöker UTVIDA en VARRAY utöver dess definierade gräns?

Om insamlingsmetoden EXTEND används med VARRAY för att förlänga den utöver dess definierade gräns måste du möta ett annat undantag som är SUBSCRIPT_BEYOND_LIMIT.

Hej, Manish! Kommer vi någonsin att se ett exempel på den här insamlingsmetoden Utökad?

Ja, vi kommer definitivt att demonstrera var och en av PL/SQL Collection-procedurerna EXTEND-anrop som vi nämnde ovan. Utöver det utökade procedursamtal med VARRAY.

1. PL/SQL-insamlingsprocedur Utöka utan argument.

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nestedTable IS TABLE OF number;
    nt_obj  my_nestedTable := my_nestedTable();
BEGIN
    nt_obj.EXTEND;
    nt_obj(1) := 10;
    DBMS_OUTPUT.PUT_LINE ('Data at index 1 is '||nt_obj(1));
END;
/

2. Insamlingsprocedur Utöka med ett argument.

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nestedTable IS TABLE OF number;
    nt_obj  my_nestedTable := my_nestedTable();
BEGIN
    nt_obj.EXTEND(3);
    nt_obj(1) := 10;
    nt_obj(2) := 20;
    nt_obj(3) := 30;
    DBMS_OUTPUT.PUT_LINE ('Data at index 1 is '||nt_obj(1));
    DBMS_OUTPUT.PUT_LINE ('Data at index 2 is '||nt_obj(2)); 
    DBMS_OUTPUT.PUT_LINE ('Data at index 3 is '||nt_obj(3));
END;
/

3. PL/SQL-insamlingsprocedur Utöka med två argument.

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nestedTable IS TABLE OF number;
    nt_obj  my_nestedTable := my_nestedTable();
BEGIN
    nt_obj.EXTEND;
    nt_obj(1) := 28;
    DBMS_OUTPUT.PUT_LINE ('Data at index 1 is '||nt_obj(1));
    nt_obj.EXTEND(5,1);
    DBMS_OUTPUT.PUT_LINE ('Data at index 4 is '||nt_obj(4));
END;
/

4. Insamlingsprocedur FÖRLÄNG (inga argument) med VARRAY

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_Varray IS VARRAY (5) OF NUMBER;
    vry_obj my_Varray := my_Varray();
BEGIN
    vry_obj.EXTEND;
    vry_obj(1) := 10;
    DBMS_OUTPUT.PUT_LINE('Data at index 1 is '||vry_obj(1));
END;
/

Varje LOC av alla ovanstående (förutom den 4) förklaras i detalj i videohandledningen på vår YouTube-kanal.

Hoppas vi har diskuterat alla möjliga frågor om PL/SQL Collection Method EXTEND som du kan möta i ditt Oracle db-certifieringsprov såväl som i din intervju. Om du har några förvirringar om certifieringar kan du också hänvisa till vår Oracle Database Certification Exam Guide.


  1. SQL-fel:ORA-00942-tabell eller vy finns inte

  2. Hur tar jag bort specifika rader i SQLite Database

  3. Hur får jag en kolumn med på varandra följande, ökande siffror, utan att några siffror saknas?

  4. Hur frågar jag mellan två datum med MySQL?