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!