Procedura DELETE v databázi Oracle
Jak je uvedeno v Úvodu do metod sběru, máme sedm funkcí sběru a 3 postupy sběru. Celkem tedy máme 10 metod sběru, mezi nimiž jsme již diskutovali 7 funkcí sběru. Proto dnes v tomto tutoriálu probereme první proceduru shromažďování PL/SQL, kterou je procedura DELETE v databázi Oracle.
Co je metoda shromažďování PL/SQL odstranit?
Metoda kolekce DELETE je přetížená procedura, která odstraňuje prvky z kolekce.
Co myslíte přetíženým postupem?
Slyšel jsi dobře. Metoda shromažďování PL/SQL DELETE je přetížená procedura. Což znamená, že můžete použít stejný postup třemi různými způsoby . Tyto tři různé způsoby jsou –
- SMAZAT :Jednoduché volání procedury bez jakýchkoli parametrů. Pokud je tedy procedura PL/SQL Collection DELETE použita bez jakéhokoli parametru, pak odstraní všechny prvky z kolekce .
- DELETE (číslo-indexu ) :Volání procedury s jedním parametrem. Tento jediný parametr je platným indexovým číslem kolekce. Procedura shromažďování DELETE vyvolaná předáním platného čísla indexu odstraní prvek konkrétního indexu .
- DELETE (počáteční-index, koncový-index ) : Volání procedury se dvěma parametry. Tento způsob volání procedury DELETE se nazývá Smazání rozsahu . Tímto způsobem musíte zadat dva indexy. A procedura vymaže rozsah prvků, které spadají mezi počáteční-index a koncový-index .
Pokud je kolekce asociativní pole s indexovaným řetězcem, počáteční index a koncový index jsou řetězce; jinak jsou počáteční a koncové indexy celá čísla.
Můžeme použít proceduru DELETE v Oracle Database se všemi kolekcemi?
Ano, metodu inkasa DELETE lze použít pro všechny tři typy kolekcí. Jsou to – vnořená tabulka, VARRAY a asociativní pole.
Počkejte! Ale pokud použijeme proceduru DELETE s VARRAYs, nebude to řídká sbírka?
Protože VARRAY není řídká kolekce, nemůžeme z ní odstranit jednotlivé řádky. Kromě toho jediné volání procedury, které můžeme provést pomocí VARRAY, je první. Což je metoda kolekce DELETE bez jakýchkoli argumentů, která odstraní všechny prvky z kolekce. Jediný způsob, jak odstranit jednotlivý řádek z VARRAY, je oříznout jej od jeho konce pomocí jiného volání procedury TRIM.
Můžeme u metody shromažďování DELETE očekávat nějakou výjimku?
Ano, existuje výjimka spojená s metodou shromažďování PL/SQL DELETE. Pokud je procedura DELETE použita na neinicializovanou vnořenou tabulku a VARRAY, vyvolá výjimku „Collection_is_Null“.
Příklady metody shromažďování PL/SQL DELETE.
Podívejme se na některé příklady každého z výše uvedených volání procedur DELETE.
Příklad 1:Volání jednoduché procedury bez argumentu.
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN --Range Delete var_nt.DELETE; FOR i IN 1..var_nt.LAST LOOP IF var_nt.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE('Value at Index ['||i||'] is '|| var_nt(i)); END IF; END LOOP; END; /
Volání procedury kolekce DELETE bez jakéhokoli argumentu odstraní všechny prvky kolekce, na kterou je aplikována. Podobně ve výše uvedeném příkladu máme vnořenou tabulku s názvem „my_nested_table“, na kterou jsme aplikovali proceduru DELETE. Při úspěšném provedení tedy volání procedury smaže všech 10 číselných prvků, které jsou v něm uloženy.
Doporučená četba:Jak vytvořit vnořenou tabulku lokálně pro blok PL/SQL.
Příklad 2:Volání procedury s jedním parametrem
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN DBMS_OUTPUT.PUT_LINE('After Deleted'); --Delete Specific Index var_nt.DELETE(5); IF var_nt.EXISTS(5) THEN DBMS_OUTPUT.PUT_LINE('Value at Index [5] is '|| var_nt(5)); ELSE DBMS_OUTPUT.PUT_LINE('Data is Deleted'); END IF; END; /
Tento jediný parametr je platným indexovým číslem kolekce. Kromě toho procedura kolekce DELETE vyvolaná předáním platného čísla indexu odstraní prvek konkrétního indexu. Ve výše uvedeném příkladu jsme tedy zadali 5 jako argument pro metodu shromažďování PL/SQL DELETE. Při úspěšném provedení tedy volání procedury odstraní prvek z kolekce, která je uložena na indexu 5.
Příklad 3:Volání procedury se dvěma parametry.
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN --Delete Range var_nt.DELETE(2,6); FOR i IN 1..var_nt.LAST LOOP IF var_nt.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE('Value at Index ['||i||'] is '|| var_nt(i)); END IF; END LOOP; END; /
Tento způsob volání procedury DELETE se nazývá Range delete. Zde musíte zadat dva indexy a procedura vymaže rozsah prvků, které spadají mezi počáteční index a koncový index. Ve výše uvedeném příkladu nastavíme počáteční index na 2 a koncový na 6. To znamená, že při spuštění volání procedury DELETE odstraní všechny prvky, které spadají do tohoto rozsahu.
Pokračujte a zkopírujte výše uvedené kódy do svého vývojáře SQL a spusťte je sami, abyste viděli, jaké jsou výstupy.
Můžete se také podívat na video tutoriál na stejné téma pro živé vysvětlení všech výše uvedených příkladů.
Toto je výukový program o metodě shromažďování PL/SQL DELETE v databázi Oracle. 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. Připojte se také ke mně na mé facebookové stránce a získejte další zajímavé koncepty PL/SQL.
Děkuji a přeji hezký den!