sql >> Database >  >> RDS >> Oracle

Verzamelmethode:DELETE-procedure in Oracle Database

VERWIJDER Procedure in Oracle Database

Zoals besproken in de Inleiding tot incassomethoden hebben we zeven incassofuncties en 3 incassoprocedures. In totaal hebben we dus 10 verzamelmethoden waarvan we tot nu toe al 7 verzamelfuncties hebben besproken. Daarom bespreken we vandaag in deze tutorial de eerste PL/SQL-verzamelprocedure, namelijk de DELETE-procedure in Oracle Database.

Wat is PL/SQL-verzamelmethode Verwijderen?

Verzamelmethode DELETE is een overbelaste procedure die elementen uit de verzameling verwijdert.

Wat bedoel je met een overbelaste procedure?

Je hebt het goed gehoord. PL/SQL-verzamelmethode DELETE is een overbelaste procedure. Wat betekent dat u dezelfde procedure op drie verschillende manieren kunt gebruiken . Deze drie verschillende manieren zijn –

  • VERWIJDEREN :Eenvoudige procedureaanroep zonder parameters. Dus als de PL/SQL-verzamelingsprocedure DELETE wordt gebruikt zonder enige parameter, dan zal het alle elementen uit de verzameling verwijderen .
  • VERWIJDEREN (indexnummer ) :Procedure-aanroep met een enkele parameter. Deze enkele parameter is het geldige indexnummer van de verzameling. Verzamelprocedure DELETE aangeroepen door een geldig indexnummer door te geven, zal het element van de specifieke index verwijderen .
  • VERWIJDEREN (start-index, eind-index ) : Procedure-aanroep met twee parameters. Deze manier om een ​​DELETE-procedure aan te roepen, wordt Range delete genoemd . Op deze manier moet u twee indexen specificeren. En de procedure verwijdert het bereik van elementen die tussen start-index en eind-index vallen .

Als de collectie een string-geïndexeerde associatieve array is, zijn de start-index en end-index string; anders zijn begin- en eindindexen gehele getallen.

Kunnen we de DELETE-procedure in Oracle Database gebruiken met alle verzamelingen?

Ja, de incassomethode DELETE kan worden gebruikt voor alle drie de soorten incasso's. Dit zijn - Geneste tabel, VARRAY's en associatieve arrays.

Wacht! Maar als we de procedure VERWIJDEREN met VARRAY's gebruiken, wordt er dan geen schaarse verzameling?

Aangezien VARRAY geen schaarse verzameling is, kunnen we er daarom geen afzonderlijke rijen uit verwijderen. Bovendien is de enige procedureaanroep die we met VARRAY kunnen uitvoeren de eerste. Dat is de verzamelingsmethode DELETE zonder enige argumenten die alle elementen uit de verzameling verwijdert. De enige manier om een ​​afzonderlijke rij uit een VARRAY te verwijderen, is door deze vanaf het einde bij te snijden met een andere procedure-aanroep TRIM.

Kunnen we een uitzondering verwachten met de verzamelmethode DELETE?

Ja, er is een uitzondering verbonden aan de PL/SQL-verzamelmethode DELETE. Als de procedure DELETE wordt toegepast op een niet-geïnitialiseerde geneste tabel en VARRAY, wordt er een uitzondering "Collection_is_Null" gegenereerd.

Voorbeelden van PL/SQL-verzamelmethode DELETE.

Laten we enkele voorbeelden bekijken van elk van de bovengenoemde Procedure DELETE-aanroepen.

Voorbeeld 1:Eenvoudige procedureaanroep zonder argument.

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

Door de incassoprocedure DELETE aan te roepen zonder enig argument, worden alle elementen van de collectie waarop deze is toegepast verwijderd. Evenzo hebben we in het bovenstaande voorbeeld een geneste tabel met de naam "my_nested_table" waarop we de procedure DELETE hebben toegepast. Dus, bij een succesvolle uitvoering, verwijdert de procedure-aanroep alle 10 numerieke elementen die erin zijn opgeslagen.

Voorgestelde lezing:hoe geneste tabel lokaal naar PL/SQL-blok te maken.

Voorbeeld 2:Procedure-aanroep met een enkele parameter

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

Deze enkele parameter is het geldige indexnummer van de verzameling. Bovendien zal de verzamelprocedure DELETE die wordt aangeroepen door een geldig indexnummer door te geven, het element van de specifieke index verwijderen. Dus in het bovenstaande voorbeeld hebben we 5 gespecificeerd als het argument voor de PL/SQL-verzamelmethode DELETE. Dus bij een succesvolle uitvoering zal de procedure-aanroep het element verwijderen uit de verzameling die is opgeslagen op index 5.

Voorbeeld 3:Procedure-aanroep met twee parameters.

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

Deze manier om de DELETE-procedure aan te roepen, wordt Range delete genoemd. Hier moet u twee indexen specificeren en de procedure verwijdert het bereik van elementen die tussen start-index en eind-index vallen. In het bovenstaande voorbeeld stellen we de startindex in op 2 en de eindindex op 6. Dit betekent dat bij uitvoering de procedureaanroep DELETE alle elementen verwijdert die binnen dit bereik vallen.

Ga je gang en kopieer de bovenstaande codes naar je SQL Developer en voer ze zelf uit om te zien wat de output is.

Je kunt ook de video-tutorial over hetzelfde onderwerp bekijken voor live uitleg van alle bovenstaande voorbeelden.

Dat is de tutorial over de PL/SQL-verzamelmethode DELETE in Oracle Database. Ik hoop dat je het leuk vond om te lezen en iets nieuws hebt geleerd. Deel deze blog dan zeker op je social media. Sluit me ook aan op mijn Facebook-pagina voor meer interessante concepten van PL/SQL.

Bedankt en een fijne dag verder!


  1. BEGIN - END blok atomaire transacties in PL/SQL

  2. MariaDB FIELD() vs FIND_IN_SET():wat is het verschil?

  3. PostgreSQL – Herhaalde waarden elimineren?

  4. SQL, hoe een tabelstructuur bij te werken