sql >> Databasteknik >  >> RDS >> Oracle

Insamlingsmetoder:FÖRSTA &SISTA funktioner i Oracle Database

Välkommen tillbaka till serien om insamlingsmetoder i Oracle Database. Hittills i den här serien har vi täckt insamlingsfunktionsräkning ( ) och samlingsfunktion finns ( ). Hoppas du tyckte om att läsa. Idag i denna PL/SQL-handledning kommer vi att lära oss insamlingsmetoderna First ( ) och Last ( ).

Vad är insamlingsmetoder FIRST ( ) och LAST ( )?

Vi använder samlingsfunktionerna First &Last för att känna till de första och sista indexvärdena som definieras i en samling.

Kan vi använda dessa insamlingsmetoder med någon typ av insamling?

ja! Du kan använda båda dessa funktioner med alla tre typer av samlingar som är Associative Array, Nested table och VARRAYs.

När returnerar insamlingsmetoden FIRST ( ) och LAST ( ) null?

Båda funktionerna returnerar null när de tillämpas på en tom samling eller när de tillämpas på en initialiseringssamling som inte har några element.

Kan du lista funktionsspecifikationen för båda dessa funktioner?

Säker! Varför inte. Specifikationen för insamlingsfunktionen FIRST ( ) är:

FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2

Och funktionsspecifikationen för samlingsfunktionen LAST ( ) är:

FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2

Information:
För strängindexerad associativ array returnerar dessa metoder strängar; "lägst" och "högst" bestäms av ordningen på teckenuppsättningen som används i den sessionen.

Vad händer om det bara finns ett element i min VARRAY?

I det fallet är samlingsfunktionen FIRST ( ) alltid 1 och insamlingsmetoden LAST ( ) är alltid lika med COUNT.

Vad händer om jag tillämpar dessa funktioner på en oinitierad samling?

Jag menar allvarligt, varför skulle du göra det! Hur som helst om du använde insamlingsfunktionen FIRST &LAST på en oinitierad samling kommer det att höja COLLECTION_IS_NULL-undantaget.

Exempel:Hur använder man insamlingsfunktionen FIRST och LAST med insamling?

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
    DBMS_OUTPUT.PUT_LINE ('First Index of the Nested table is ' || col_var.FIRST);
    DBMS_OUTPUT.PUT_LINE ('Last Index of the Nested table is ' || col_var.LAST);
END;
/

I exemplet ovan har vi skapat en kapslad tabell med namnet NT_TAB och initierat den med samlingsvariabeln col_var. Den här kapslade tabellen har 5 index som vi har lagrat värdena i. Det lägsta indexet i denna kapslade tabell är 1 som har värdet 10 och maximalt index är 5 med värdet 50. Sålunda vid exekvering blir resultatet från den första DBMS_OUTPUT 1 och från den andra DBMS_OUTPUT-satsen blir 5.

Kopiera koden och kolla in resultatet själv.

Vad händer om vi tar bort det första elementet i den kapslade tabellen? Vad blir då resultatet av insamlingsfunktionen FIRST?

Det är en väldigt bra fråga! Om du tar bort det första elementet i insamlingsfunktionen kommer insamlingsfunktionen FIRST att returnera subskriptet som är större än 1 och som innehåller en del data. Låt oss se exemplet:

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
col_var.DELETE(1);
    DBMS_OUTPUT.PUT_LINE ('First Index after DELETE is ' || col_var.FIRST);
END;
/

I exemplet ovan tog vi bort det första elementet i den kapslade tabellen nt_tab med insamlingsmetoden DELETE. Efter att ha tagit bort det första elementet som är 10 på index 1 är den nya lägsta teckningen nu 2 som har en del data lagrad i sig. Således vid exekvering blir resultatet 2.

Vad händer om jag tar bort elementet från mitten av samlingen?

Om du tar bort data från mitten kommer insamlingsfunktionen LAST att returnera ett värde som är större än värdet som returneras av metoden COUNT.

Kan vi se data som lagras i samlingens index med FIRST och LAST insamlingsmetoder?

När jag förklarade samma koncept i en klass räckte en elev upp sin hand och frågade mig.

Sir, hittills ser vi att dessa funktioner returnerar samlingens indexnummer. Tänk om vi vill se data lagrade i dessa index. Finns det något sätt att se data som lagras i indexet med dessa insamlingsmetoder FÖRST &SISTA?

Svaret på denna fråga är, ja! Självklart . Tillsammans med nedsänkt nummer kan du använda dessa funktioner för att se data lagrade i samlingens lägsta och högsta index.

Till exempel

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
    -- This output statement will return 10 which is the value stored at the first index
    DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.FIRST));
    -- This output statement will return 50 which is the value stored at the last index
    DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.LAST));
END;
/

För att se data lagrade i det första och sista indexet behöver du bara placera funktionsanropen för dessa funktioner inom parentesen av samlingsvariabeln som är col_var precis som vi gjorde i exemplet ovan.

Nu är frågan Vad händer om vi TRIMMA kollektionen? Vad blir då resultatet av insamlingsfunktionen LAST? Fortsätt och kolla in videosjälvstudien där jag har förklarat vad som blir resultatet av insamlingsmetoden SENAST när du trimmar samlingen med hjälp av exemplet.

Det handlar om dessa insamlingsmetoder. Hoppas du tyckte att den här bloggen var användbar. Tack och ha en bra dag!


  1. De bästa sätten att öka databaseffektiviteten

  2. 3 sätt att returnera en lista över SQL Server Agent-jobb (T-SQL)

  3. CURDATE() Exempel – MySQL

  4. Kapslade klasser - CustomRowMapper !! Inget problem längre!! - Del 1