sql >> Databáze >  >> RDS >> Oracle

Metoda sběru:Funkce PRIOR &NEXT v databázi Oracle

Jak jsme viděli v Úvodu do metod shromažďování PL/SQL, v databázi Oracle existuje 7 funkcí shromažďování. Mezi těmito sedmi funkcemi jsme se již naučili prvních pět metod. Před a Další jsou poslední dvě metody/funkce shromažďování PL/SQL, které ještě zbývá prozkoumat.

V dnešním blogu PL/SQL tedy tyto dvě nedotčené metody sběru podrobně prozkoumáme.

Co jsou funkce předchozího a dalšího shromažďování?

Vždy je dobré mít v rukávu nějaké funkce, které vám mohou pomoci při orientaci v obsahu vaší sbírky. Těmito funkcemi by mohla být funkce Před a Další.

Obě tyto funkce berou index kolekce jako vstup a vrací výsledek.

Například metoda sběru PL/SQL PRIOR vezme index jako vstup a vrátí hodnotu uloženou do předchozího nejnižšího indexu. Zatímco metoda sběru NEXT vrací hodnotu z nejbližšího vyššího indexu.

Jsou předchozí a následující kolekce funkcemi nebo procedurami?

Před i Další jsou funkce.

Můžeme obě tyto funkce použít u všech tří typů kolekcí?

Ano, obě funkce kolekce Prior i Next lze použít u všech tří typů kolekcí.

Kdy vrátí předchozí a další metody shromažďování PL/SQL hodnotu null?

Metoda kolekce Prior vrátí hodnotu null, pokud nejsou k dispozici žádné nižší hodnoty indexu, a metoda Collection Method vrátí hodnotu null, pokud nejsou k dispozici žádné vyšší hodnoty indexu, které by bylo možné vrátit.

Jednoduše řečeno můžeme říci, že obě tyto funkce kolekce vracejí hodnotu Null, pokud jsou použity s prvním a posledním indexem kolekce .

Jaký bude výstup metod kolekce Next a Prior, pokud je použijeme s asociativním polem?

Pokud jsou metody sběru PRIOR a NEXT použity s asociativními poli, vrátí výstup datového typu VARCHAR2 nebo LONG.

Slyšel jsem, že tyto metody vyvolávají určitý typ výjimky. Je to pravda?

Ano, je to pravda. Pokud se některá z těchto funkcí použije na neinicializovanou vnořenou tabulku nebo Varray, vyvolá výjimku COLLECTION_IS_NULL.

Můžete nám ukázat, jak tyto funkce používat v našem kódu?

Jistě proč ne! Ukážu vám aplikaci funkcí kolekce Prior i Next pomocí velmi snadného kódu.

Příklad předchozí metody inkasa.

V této metodě se naučíme, jak používat metodu sběru Prior s vnořenou tabulkou.

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

Ve výše uvedeném anonymním bloku PL/SQL máme dva výstupní příkazy s ‚Předchozím voláním funkce‘. První výstupní příkaz vrátí číslo indexu před indexovým číslem 3, které má v sobě uloženou nějakou hodnotu. V našem případě je index před indexem číslo 3 2. Tedy 2 bude výstupem prvního výstupního příkazu.

Ve druhém výstupním příkazu jsme zavolali funkci Prior a dodali ji jako vstup objektu kolekce.

var_nt(var_nt.PRIOR(3)) 

Oracle engine nejprve provede funkci Collection Prior (říkejme tomu část 1) a pomocí výsledku z části 1 pak spustí objekt kolekce (říkejme tomu část 2) a vytvoří konečný výsledek, který bude v našem případě 18. Pokračujte, zkopírujte kód a zkuste se spustit.

Co se stane, když odstraníme předchozí nejnižší index z vnořené tabulky?

Nyní je tedy otázkou, co se stane, když smažete předchozí nejnižší index, který je v našem kódu 2. V takovém případě výsledek rozhodně nebude stejný. Funkce Prior vrací předchozí nejnižší index. Ale ten index musí obsahovat nějakou hodnotu.

Zkus to sám. Zde je kód.

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

Příklad další metody shromažďování.

Můžete použít metodu PL/SQL Collection Next stejnou jako jste použili funkci Prior ve výše uvedeném kódu. Metoda kolekce NEXT vrací hodnotu z nejbližšího vyššího indexu. Zde je příklad

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

Oba příklady jsou téměř stejné kromě volání funkce kolekce. V sekci provádění tohoto PL/SQL bloku máme opět dva výstupní příkazy. První výstupní příkaz vrátí další neprázdné číslo indexu, zatímco druhý vrátí data uložená v tomto indexu. Fungování obou těchto prohlášení bude stejné, jak jsme diskutovali výše. Pokračujte, zkopírujte kód a podívejte se na výstup.

To byl podrobný návod na metodu PL/SQL Collection Next a Prior. Doufám, že se vám čtení líbilo a dozvěděli jste se něco nového. Nezapomeňte sdílet tento blog na svých sociálních sítích. Chcete-li sdílet tento blog na svém Facebooku, klikněte sem a pro twitter klikněte sem.

Děkuji a přeji hezký den!


  1. Jak vrátit prvky z pole JSON v MariaDB

  2. Neo4j - Zrušte omezení pomocí Cypher

  3. Nelze vytvořit databázovou tabulku s názvem 'user' v PostgreSQL

  4. spojit datový sloupec oddělený čárkou