sql >> Database >  >> RDS >> Oracle

Verzamelmethoden:EERSTE &LAATSTE functies in Oracle Database

Welkom weer bij de serie over incassomethoden in Oracle Database. Tot dusverre hebben we in deze serie Verzamelfunctie Aantal ( ) en Verzamelfunctie Bestaan ​​( ) behandeld. Ik hoop dat je het leuk vond om te lezen. Vandaag leren we in deze PL/SQL-zelfstudie de verzamelmethoden First ( ) en Last ( ).

Wat zijn de verzamelmethoden FIRST ( ) en LAST ( )?

We gebruiken de verzamelingsfuncties First &Last om de eerste en laatste indexwaarden te kennen die in een verzameling zijn gedefinieerd.

Kunnen we deze verzamelmethoden gebruiken bij elk type verzameling?

Ja! U kunt beide functies gebruiken met alle drie typen verzamelingen die Associatieve Array, Geneste tabel en VARRAY's zijn.

Wanneer retourneren de verzamelmethode FIRST ( ) en LAST ( ) null?

Beide functies retourneren null wanneer toegepast op een lege verzameling of wanneer toegepast op een geïnitialiseerde verzameling die geen elementen heeft.

Kun je de functiespecificatie voor beide functies opsommen?

Zeker! Waarom niet. De specificatie voor de verzamelfunctie FIRST ( ) is:

FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2

En de functiespecificatie voor de verzamelfunctie LAATSTE ( ) is:

FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2

Informatie:
Voor string-geïndexeerde associatieve arrays retourneren deze methoden strings; "laagste" en "hoogste" worden bepaald door de volgorde van de tekenset die in die sessie wordt gebruikt.

Wat als er maar 1 element in mijn VARRAY is?

In dat geval is de verzamelfunctie FIRST ( ) altijd 1 en is de verzamelmethode LAST ( ) altijd gelijk aan COUNT.

Wat als ik deze functies toepas op een niet-geïnitialiseerde verzameling?

Ik bedoel serieus, waarom zou je dat doen! Hoe dan ook, als je de collectiefunctie FIRST &LAST hebt toegepast op een niet-geïnitialiseerde collectie, wordt de uitzondering COLLECTION_IS_NULL gegenereerd.

Voorbeeld:hoe gebruik ik de verzamelfunctie EERSTE en LAATSTE met verzameling?

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

In het bovenstaande voorbeeld hebben we een geneste tabel gemaakt met de naam NT_TAB en deze geïnitialiseerd met de verzamelingsvariabele col_var. Deze geneste tabel heeft 5 indexen waarin we de waarden hebben opgeslagen. De laagste index in deze geneste tabel is 1 met waarde 10 en maximale index is 5 met waarde 50. Dus bij uitvoering zal het resultaat van de eerste DBMS_OUTPUT 1 zijn en van de tweede DBMS_OUTPUT-instructie 5.

Kopieer de code en bekijk het resultaat zelf.

Wat als we het eerste element van de geneste tabel verwijderen? Wat zal dan de output zijn van de verzamelfunctie FIRST?

Dat is een hele goede vraag! Als u het eerste element van de verzamelingsfunctie verwijdert, zal de verzamelingsfunctie FIRST het subscript retourneren dat groter is dan 1 en enkele gegevens bevat. Laten we eens kijken naar het voorbeeld:

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

In het bovenstaande voorbeeld hebben we het eerste element van de geneste tabel nt_tab verwijderd met behulp van de verzamelingsmethode DELETE. Na het verwijderen van het eerste element dat 10 op index 1 is, is het nieuwe laagste subscript nu 2 waarin enkele gegevens zijn opgeslagen. Dus bij uitvoering is het resultaat 2.

Wat als ik het element uit het midden van de verzameling verwijder?

Als u de gegevens uit het midden verwijdert, retourneert de verzamelfunctie LAATSTE een waarde die groter is dan de waarde die wordt geretourneerd door de COUNT-methode.

Kunnen we de gegevens zien die zijn opgeslagen in de indexen van de verzameling met behulp van de EERSTE en LAATSTE verzamelingsmethoden?

Toen ik hetzelfde concept in een klas uitlegde, stak een student haar hand op en vroeg het me.

Meneer, tot nu toe zien we dat deze functies het indexnummer van de verzameling teruggeven. Wat als we de gegevens willen zien die in die index zijn opgeslagen. Is er een manier om de gegevens die in de index zijn opgeslagen te zien met behulp van deze verzamelmethoden EERST &LAATSTE?

Het antwoord op deze vraag is:ja! Natuurlijk . Samen met het subscriptnummer kunt u deze functies gebruiken om de gegevens te zien die zijn opgeslagen in de laagste en hoogste index van de verzameling.

Bijvoorbeeld

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

Om de gegevens te zien die zijn opgeslagen in de eerste en laatste index, hoeft u alleen de functieaanroepen van deze functie tussen de haakjes van de verzamelingsvariabele te plaatsen, namelijk col_var net zoals we deden in het bovenstaande voorbeeld.

Nu is de vraag wat als we de collectie TRIMMEN? Wat is dan de output van de collectiefunctie LAATSTE? Ga je gang en bekijk de video-tutorial waar ik heb uitgelegd wat de uitvoer van de verzamelingsmethode LAATST zal zijn wanneer u de verzameling bijsnijdt met behulp van het voorbeeld.

Dat is alles over deze Verzamelmethoden. Ik hoop dat je deze blog nuttig vond. Bedankt en een fijne dag verder!


  1. WinRT System.Data - Verbinding maken met SQL

  2. Controleer op mislukte e-mail in SQL Server (T-SQL)

  3. Neo4j - Maak een index met Cypher

  4. Tijdsverschil krijgen tussen twee tijden in PHP