sql >> Database teknologi >  >> RDS >> Oracle

Indsamlingsmetode:FØRSTE OG NÆSTE funktioner i Oracle-databasen

Som vi så i Introduktionen til PL/SQL-indsamlingsmetoder, er der 7 indsamlingsfunktioner i Oracle Database. Blandt disse syv funktioner har vi allerede lært de første fem metoder. Forud og Næste er de sidste to PL/SQL-indsamlingsmetoder/funktioner, som stadig er tilbage at udforske.

Derfor vil vi i dagens PL/SQL-blog udforske disse to uberørte indsamlingsmetoder i detaljer.

Hvad er forudgående og næste indsamlingsfunktioner?

Det er altid godt at have nogle funktioner under ærmet, som kan hjælpe dig med at navigere gennem indholdet af din samling. Funktionen Forud og Næste kunne være disse funktioner.

Begge disse funktioner tager et indeks over samlingen som input og returnerer resultatet.

For eksempel tager PL/SQL-indsamlingsmetoden PRIOR et indeks som input og returnerer den værdi, der er gemt i det forrige laveste indeks. Hvorimod indsamlingsmetoden NEXT returnerer værdien fra det næste højere indeks.

Er forudgående og næste indsamling funktioner eller procedurer?

Både Prior og Next er funktioner.

Kan vi bruge begge disse funktioner med alle tre typer samlinger?

Ja, både forudgående og næste indsamlingsfunktioner kan bruges med alle de tre typer af samlinger.

Hvornår vil PL/SQL-indsamlingsmetoderne før og næste returnere null?

Collection Method Preor returnerer null, når der ikke er lavere sænkede værdier tilgængelige, og Collection Method Next returnerer null, når der ikke er nogen højere sænkede værdier tilgængelige at returnere.

Med enkle ord kan vi sige, at begge samlingsfunktioner returnerer Null, hvis de bruges med henholdsvis det første og det sidste indeks for en samling .

Hvad bliver outputtet af indsamlingsmetoden Next og Prior, hvis vi bruger dem med associativ array?

Hvis indsamlingsmetoden PRIOR og NEXT bruges med associative arrays, vil de returnere et output af VARCHAR2 eller LONG datatype.

Jeg har hørt, at disse metoder rejser en form for undtagelse. Er det sandt?

Ja det er sandt. Hvis en af ​​disse funktioner anvendes på en ikke-initialiseret indlejret tabel eller en Varray, hæver de COLLECTION_IS_NULL undtagelsen.

Kan du vise os, hvordan man bruger disse funktioner i vores kode?

Hvorfor ikke! Jeg vil vise dig anvendelsen af ​​både forudgående og næste indsamlingsfunktioner ved hjælp af en meget nem kode.

Eksempel på tidligere indsamlingsmetode.

I denne metode lærer vi, hvordan du bruger indsamlingsmetoden Prior med Nested Table.

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

I ovenstående anonyme PL/SQL-blok har vi to output-sætninger med 'Prior Function Call'. Den første output-sætning returnerer indeksnummeret før indeksnummer 3, som har en værdi gemt i sig. I vores tilfælde er indekset før indeksnummer 3 2. Således vil 2 være outputtet af den første output-sætning.

I den anden output-sætning kaldte vi Prior-funktionen og leverede den som input til samlingsobjektet.

var_nt(var_nt.PRIOR(3)) 

Oracle-motoren vil udføre Collection-funktionen Prior først (lad os kalde det del 1), og ved at bruge resultatet fra del 1 vil den derefter udføre samlingsobjektet (lad os kalde det del 2) og producere det endelige resultat, som vil være 18 i vores tilfælde. Gå videre, kopier koden og prøv at udføre dig selv.

Hvad vil der ske, hvis vi sletter det forrige laveste indeks fra den indlejrede tabel?

Så nu er spørgsmålet, hvad der vil ske, hvis du sletter det forrige laveste indeks, som er 2 i vores kode. I så fald vil resultatet bestemt ikke være det samme. Forudgående funktion returnerer det forrige laveste indeks. Men det indeks skal indeholde en vis værdi.

Prøv det selv. Her er koden.

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

Eksempel på indsamlingsmetode Næste.

Du kan bruge PL/SQL Collection-metoden Næste samme som du brugte Prior-funktionen i ovenstående kode. Indsamlingsmetode NEXT returnerer værdien fra det næste højere indeks. Her er eksemplet

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

Begge eksempler er næsten de samme, undtagen samlingsfunktionskaldet. I udførelsessektionen af ​​denne PL/SQL-blok har vi igen to output-sætninger. Den første output-sætning returnerer det næste ikke-tomme indeksnummer, mens den anden returnerer de data, der er gemt i det indeks. Virkningen af ​​begge disse udsagn vil være den samme som vi diskuterede ovenfor. Gå videre og kopier koden og se outputtet.

Det var den detaljerede tutorial om PL/SQL-indsamlingsmetoden Next og Prior. Håber du nød at læse og lærte noget nyt. Sørg for at dele denne blog på dine sociale medier. For at dele denne blog på din Facebook, klik her og for twitter, klik her.

Tak og god dag!


  1. Sådan tilføjer du et sidehoved og en sidefod til en formular i Microsoft Access

  2. Sådan får du et OBJECT_NAME() fra en anden database i SQL Server

  3. Hvordan får man effektiv Sql Server-deadlock-håndtering i C# med ADO?

  4. en bedre tilgang end at gemme mysql-adgangskode i almindelig tekst i konfigurationsfil?