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

Metoda sběru:Postup DELETE v databázi Oracle

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!


  1. Proč ISNUMERIC('.') vrací 1?

  2. Nastavit výchozí hodnotu celočíselného sloupce SQLite

  3. SQL - Rozdíl mezi COALESCE a ISNULL?

  4. Vytvořte databázi MySQL