sql >> Database >  >> RDS >> Oracle

Verzamelmethode:PRIOR &NEXT-functies in Oracle Database

Zoals we in de Inleiding tot PL/SQL-verzamelmethoden hebben gezien, zijn er 7 verzamelfuncties in Oracle Database. Van deze zeven functies hebben we de eerste vijf methoden al geleerd. Prior en Next zijn de laatste twee PL/SQL-verzamelingsmethoden/-functies die nog moeten worden onderzocht.

Dus in de PL/SQL-blog van vandaag zullen we deze twee ongerepte verzamelmethoden in detail onderzoeken.

Wat zijn eerdere en volgende incassofuncties?

Het is altijd goed om een ​​aantal functies onder uw mouw te hebben die u kunnen helpen bij het navigeren door de inhoud van uw collectie. De functie Prior &Next zouden die functies kunnen zijn.

Beide functies nemen een index van de verzameling als invoer en retourneren het resultaat.

De PL/SQL-verzamelmethode PRIOR neemt bijvoorbeeld een index als invoer en retourneert de waarde die is opgeslagen in de vorige laagste index. Terwijl de verzamelmethode NEXT de waarde van de eerstvolgende hogere index retourneert.

Zijn eerdere en volgende verzamelingsfuncties of procedures?

Zowel Prior als Next zijn functies.

Kunnen we deze beide functies gebruiken met alle drie soorten verzamelingen?

Ja, zowel de vorige als de volgende verzamelingsfuncties kunnen worden gebruikt met alle drie soorten verzamelingen.

Wanneer zullen PL/SQL-verzamelmethoden Prior en Next null retourneren?

Verzamelmethode Prior retourneert null als er geen lagere subscriptwaarden beschikbaar zijn en Verzamelmethode Next retourneert null als er geen hogere subscriptwaarden beschikbaar zijn om te retourneren.

In eenvoudige bewoordingen kunnen we zeggen dat beide verzamelingsfuncties Null retourneren als ze respectievelijk worden gebruikt met de eerste en laatste indexen van een verzameling .

Wat zal de output zijn van de Verzamelmethode Next en Prior als we ze gebruiken met een associatieve array?

Als de verzamelmethode PRIOR en NEXT worden gebruikt met associatieve arrays, retourneren ze een uitvoer van het gegevenstype VARCHAR2 of LONG.

Ik heb gehoord dat deze methoden een soort uitzondering veroorzaken. Is het waar?

Ja het is waar. Als een van deze functies wordt toegepast op een niet-geïnitialiseerde geneste tabel of een Varray, wordt de uitzondering COLLECTION_IS_NULL gegenereerd.

Kun je ons laten zien hoe we deze functies in onze code kunnen gebruiken?

Natuurlijk waarom niet! Ik zal je de toepassing van zowel de Prior- als Next-verzamelingsfuncties laten zien met behulp van een zeer eenvoudige code.

Voorbeeld van eerder verzamelde methode.

In deze methode zullen we leren hoe we de verzamelmethode Prior met geneste tabel kunnen gebruiken.

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

In het bovenstaande anonieme PL/SQL-blok hebben we twee uitvoerinstructies met 'Prior Function Call'. De eerste uitvoerinstructie retourneert het indexnummer voorafgaand aan het indexnummer 3 waarin een waarde is opgeslagen. In ons geval is de index voorafgaand aan indexnummer 3 2. Dus 2 is de uitvoer van het eerste uitvoerstatement.

In de tweede uitvoeropdracht hebben we de functie Prior aangeroepen en deze als invoer aan het collectieobject geleverd.

var_nt(var_nt.PRIOR(3)) 

Oracle-engine zal eerst de verzamelingsfunctie Prior uitvoeren (laten we het deel 1 noemen) en met behulp van het resultaat van deel 1 zal het dan het verzamelingsobject uitvoeren (laten we het deel 2 noemen) en het uiteindelijke resultaat produceren dat in ons geval 18 zal zijn. Ga je gang, kopieer de code en probeer het zelf uit te voeren.

Wat gebeurt er als we de vorige laagste index uit de geneste tabel verwijderen?

Dus nu is de vraag, wat er zal gebeuren als je de vorige laagste index, die 2 is in onze code, verwijdert. In dat geval zal het resultaat zeker niet hetzelfde zijn. Voorafgaande functie retourneert de vorige laagste index. Maar die Index moet enige waarde bevatten.

Probeer het zelf. Hier is de code.

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        var_nt.DELETE(2);
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

Voorbeeld van volgende verzamelmethode.

U kunt de PL/SQL-verzamelingsmethode Next gebruiken, net zoals u de functie Prior in de bovenstaande code hebt gebruikt. Verzamelmethode NEXT retourneert de waarde van de eerstvolgende hogere index. Hier is het voorbeeld

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        dbms_output.put_line('Next Higher Index to index 3 is '||var_nt.NEXT(3)); 
        dbms_output.put_line('Value after 3rd Index is '||var_nt(var_nt.NEXT(3))); 
END;
/

Beide voorbeelden zijn bijna hetzelfde, behalve de aanroep van de verzamelingsfunctie. In de uitvoeringssectie van dit PL/SQL-blok hebben we weer twee uitvoerinstructies. De eerste uitvoeropdracht retourneert het volgende niet-lege indexnummer, terwijl de tweede de gegevens retourneert die in die index zijn opgeslagen. De werking van beide uitspraken zal hetzelfde zijn als we hierboven hebben besproken. Ga je gang en kopieer de code en bekijk de uitvoer.

Dat was de gedetailleerde tutorial over de PL/SQL Collection-methode Next en Prior. Ik hoop dat je het leuk vond om te lezen en iets nieuws hebt geleerd. Zorg ervoor dat u deze blog deelt op uw sociale media. Om deze blog te delen op uw Facebook Klik hier en voor twitter Klik hier.

Bedankt en een fijne dag verder!


  1. SQL-query om tabel in MySQL te verwijderen

  2. java.lang.IllegalArgumentException:kolom '_id' bestaat niet

  3. MariaDB JSON_LENGTH() uitgelegd

  4. Dynamische update-instructie met variabele kolomnamen