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!