Vítejte zpět v sérii o metodách shromažďování v databázi Oracle. Dosud jsme v této sérii pokryli Počet funkcí sběru ( ) a Existující funkci sběru ( ). Doufám, že se vám čtení líbilo. Dnes se v tomto tutoriálu PL/SQL naučíme metody sběru First ( ) a Last ( ).
Co jsou metody sběru FIRST ( ) a LAST ( )?
Funkce kolekce First &Last používáme ke zjištění prvních a posledních hodnot indexu definovaných v kolekci.
Můžeme tyto metody shromažďování použít u jakéhokoli typu shromažďování?
Ano! Obě tyto funkce můžete použít se všemi třemi typy kolekcí, kterými jsou Asociativní pole, Vnořená tabulka a VARRAY.
Kdy vrátí metoda sběru FIRST ( ) a LAST ( ) hodnotu null?
Obě funkce vrátí hodnotu null při použití na prázdnou kolekci nebo při aplikaci na inicializační kolekci, která nemá žádné prvky.
Můžete uvést specifikaci funkcí pro obě tyto funkce?
Tak určitě! Proč ne. Specifikace pro funkci kolekce FIRST ( ) je:
FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2
A specifikace funkce kolekce funkce LAST ( ) je:
FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2
Informace:
Pro řetězcové indexované asociativní pole tyto metody vracejí řetězce; „nejnižší“ a „nejvyšší“ jsou určeny pořadím znakové sady používané v dané relaci.
Co když je v mém VARRAY pouze 1 prvek?
V takovém případě je funkce sběru FIRST ( ) vždy 1 a metoda sběru LAST ( ) je vždy rovna COUNT.
Co kdybych tyto funkce použil na neinicializovanou kolekci?
Myslím to vážně, proč bys to dělal! Každopádně, pokud jste použili funkci kolekce FIRST &LAST na neinicializovanou kolekci, vyvolá to výjimku COLLECTION_IS_NULL.
Příklad:Jak používat funkci sběru FIRST and LAST with collection?
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; /
Ve výše uvedeném příkladu jsme vytvořili vnořenou tabulku s názvem NT_TAB a inicializovali ji pomocí proměnné kolekce col_var. Tato vnořená tabulka má 5 indexů, do kterých jsme uložili hodnoty. Nejnižší index v této vnořené tabulce je 1, který má hodnotu 10 a maximální index je 5 s hodnotou 50. Při provedení tedy bude výsledek z prvního příkazu DBMS_OUTPUT 1 a z druhého příkazu DBMS_OUTPUT bude 5.
Pokračujte, zkopírujte kód a sami si zkontrolujte výsledek.
Co když odstraníme první prvek vnořené tabulky? Jaký pak bude výstup funkce sběru FIRST?
To je velmi dobrá otázka! Pokud vymažete první prvek funkce kolekce, funkce kolekce FIRST vrátí dolní index, který je větší než 1 a obsahuje nějaká data. Podívejme se na příklad:
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; /
Ve výše uvedeném příkladu jsme odstranili první prvek vnořené tabulky nt_tab pomocí metody sběru DELETE. Po smazání prvního prvku, který je 10 na indexu 1, je nyní nový nejnižší index 2, do kterého jsou uložena některá data. Po provedení tedy bude výsledek 2.
Co když smažu prvek ze středu kolekce?
Pokud smažete data uprostřed, pak sběrná funkce LAST vrátí hodnotu, která je větší než hodnota vrácená metodou COUNT.
Můžeme vidět data uložená do indexů kolekce pomocí PRVNÍ a POSLEDNÍ metody shromažďování?
Když jsem ve třídě vysvětloval stejný koncept, studentka zvedla ruku a zeptala se mě.
Pane, zatím vidíme, že tyto funkce vracejí indexové číslo kolekce. Co když chceme vidět data uložená v tomto indexu. Existuje způsob, jak zobrazit data uložená v indexu pomocí těchto metod sběru FIRST &LAST?
Odpověď na tuto otázku zní,ano! Samozřejměa . Spolu s číslem dolního indexu můžete tyto funkce použít k zobrazení dat uložených v nejnižším a nejvyšším indexu kolekce.
Například
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; /
Abyste viděli data uložená v prvním a posledním indexu, stačí umístit volání funkcí těchto funkcí do závorky proměnné kolekce, která je col_var stejně jako jsme to udělali ve výše uvedeném příkladu.
Nyní je otázkou, co kdybychom kolekci OŘEZALI? Jaký pak bude výstup sběrné funkce LAST? Pokračujte a podívejte se na výukové video kde jsem vysvětlil, co bude výstupem metody kolekce LAST, když oříznete kolekci pomocí příkladu.
To je vše o těchto metodách sběru. Doufám, že vám tento blog byl užitečný. Děkuji a přeji hezký den!