sql >> Database teknologi >  >> RDS >> Oracle

Indsamlingsmetode:SLET-procedure i Oracle-databasen

SLET Procedure i Oracle-databasen

Som beskrevet i Introduktion til indsamlingsmetoder har vi syv indsamlingsfunktioner og 3 indsamlingsprocedurer. Derfor har vi i alt 10 indsamlingsmetoder, blandt hvilke vi allerede har diskuteret 7 indsamlingsfunktioner indtil videre. Derfor vil vi i dag i denne vejledning diskutere den første PL/SQL-indsamlingsprocedure, som er DELETE-proceduren i Oracle Database.

Hvad er PL/SQL-indsamlingsmetode Slet?

Indsamlingsmetode DELETE er en overbelastet procedure, som fjerner elementer fra samlingen.

Hvad mener du med en overbelastet procedure?

Du hørte det rigtigt. PL/SQL-indsamlingsmetoden DELETE er en overbelastet procedure. Hvilket betyder, at du kan bruge den samme procedure på tre forskellige måder . Disse tre forskellige måder er –

  • SLET :Simpelt procedurekald uden nogen parametre. Så hvis PL/SQL-indsamlingsproceduren DELETE bruges uden nogen parameter, vil den fjerne alle elementer fra samlingen .
  • SLET (indeksnummer ) :Procedurekald med en enkelt parameter. Denne enkelte parameter er det gyldige indeksnummer for samlingen. Indsamlingsprocedure DELETE kaldet ved at sende et gyldigt indeksnummer vil fjerne elementet i det specifikke indeks .
  • SLET (startindeks, slutindeks ) : Procedurekald med to parametre. Denne måde at kalde en DELETE-procedure på kaldes Range delete . På denne måde skal du angive to indekser. Og proceduren sletter rækken af ​​elementer, der falder mellem startindeks og slutindeks .

Hvis samlingen er en strengindekseret associativ matrix, er startindekset og slutindekset streng; ellers er start- og slutindekser heltal.

Kan vi bruge SLETTE-proceduren i Oracle-databasen med alle samlingerne?

Ja, indsamlingsmetoden DELETE kan bruges til alle tre typer af samlinger. Disse er – Indlejrede tabel, VARRAYs og Associative arrays.

Vent! Men hvis vi bruger proceduren DELETE med VARRAYs vil det så ikke lave en sparsom samling?

Da VARRAY ikke er en sparsom samling, kan vi derfor ikke slette individuelle rækker fra den. Desuden er det eneste procedurekald, som vi kan udføre med VARRAY, det første. Som er indsamlingsmetode DELETE uden nogen argumenter, som fjerner alle elementer fra samlingen. Den eneste måde at fjerne en individuel række fra en VARRAY er ved at trimme den fra dens ende ved at bruge et andet procedurekald TRIM.

Kan vi forvente nogen undtagelse med indsamlingsmetoden DELETE?

Ja, der er en undtagelse forbundet med PL/SQL-indsamlingsmetoden DELETE. Hvis proceduren DELETE anvendes på en ikke-initialiseret indlejret tabel og VARRAY, fremkalder den undtagelsen "Collection_is_Null".

Eksempler på PL/SQL-indsamlingsmetode SLET.

Lad os se nogle eksempler på hver af de ovennævnte procedure SLET-opkald.

Eksempel 1:Simpelt procedurekald uden 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;
/

Hvis du kalder indsamlingsproceduren DELETE uden argumenter, slettes alle elementer i samlingen, som den er anvendt over. Ligeledes har vi i ovenstående eksempel en indlejret tabel med navnet "my_nested_table", som vi anvendte proceduren DELETE over. Ved vellykket udførelse vil procedurekaldet således slette alle de 10 numeriske elementer, som er gemt i det.

Foreslået læsning:Sådan opretter du indlejret tabel lokal til PL/SQL-blok.

Eksempel 2:Procedurekald med en enkelt 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;
/

Denne enkelte parameter er det gyldige indeksnummer for samlingen. Desuden vil indsamlingsproceduren DELETE kaldet ved at sende et gyldigt indeksnummer fjerne elementet i det specifikke indeks. Så i ovenstående eksempel specificerede vi 5 som argumentet til PL/SQL-indsamlingsmetoden DELETE. Ved vellykket udførelse vil procedurekaldet således fjerne elementet fra samlingen, som er gemt i indeks 5.

Eksempel 3:Procedurekald med to parametre.

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

Denne måde at kalde DELETE-proceduren betegnes som Range delete. Her skal du angive to indekser, og proceduren sletter rækken af ​​elementer, der falder mellem startindeks og slutindeks. I ovenstående eksempel sætter vi startindekset som 2 og slutindekset som 6. Dette betyder, at procedurekaldet DELETE ved udførelse vil fjerne alle de elementer, der falder inden for dette område.

Gå videre og kopier ovenstående koder til din SQL-udvikler, og kør dem selv for at se, hvad outputtet er.

Du kan også se selvstudievideoen om det samme emne for live forklaring af alle ovenstående eksempler.

Det er selvstudiet om PL/SQL-indsamlingsmetoden DELETE i Oracle Database. Håber du nød at læse og lærte noget nyt. Sørg for at dele denne blog på dine sociale medier. Slut dig også til mig på min Facebook-side for flere interessante begreber om PL/SQL.

Tak og god dag!


  1. Er mysqli_real_escape_string nok til at undgå SQL-injektion eller andre SQL-angreb?

  2. SQL-visninger

  3. Hvordan bruger man mysqli forberedte udsagn?

  4. SQL Server:dynamisk pivot over 5 kolonner