Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Erfassungsmethode:DELETE-Prozedur in der Oracle-Datenbank

DELETE-Prozedur in der Oracle-Datenbank

Wie in der Einführung in Sammlungsmethoden besprochen, haben wir sieben Sammlungsfunktionen und drei Sammlungsverfahren. Insgesamt haben wir also 10 Sammelmethoden, von denen wir bisher bereits 7 Sammelfunktionen besprochen haben. Daher werden wir heute in diesem Tutorial die erste PL/SQL-Erfassungsprozedur besprechen, die die DELETE-Prozedur in der Oracle-Datenbank ist.

Was ist die PL/SQL-Erfassungsmethode Delete?

Die Sammlungsmethode DELETE ist eine überladene Prozedur, die Elemente aus der Sammlung entfernt.

Was meinen Sie mit einer überladenen Prozedur?

Sie haben richtig gehört. Die PL/SQL-Erfassungsmethode DELETE ist eine überladene Prozedur. Das heißt, Sie können dasselbe Verfahren auf drei verschiedene Arten verwenden . Diese drei verschiedenen Wege sind –

  • LÖSCHEN :Einfacher Prozeduraufruf ohne Parameter. Wenn also die PL/SQL-Collection-Prozedur DELETE ohne Parameter verwendet wird, werden alle Elemente aus der Collection entfernt .
  • LÖSCHEN (Indexnummer ) :Prozeduraufruf mit einem einzigen Parameter. Dieser einzelne Parameter ist die gültige Indexnummer der Sammlung. Die Sammlungsprozedur DELETE, die durch Übergeben einer gültigen Indexnummer aufgerufen wird, entfernt das Element des spezifischen Index .
  • DELETE (Startindex, Endindex ) : Prozeduraufruf mit zwei Parametern. Diese Art des Aufrufs einer DELETE-Prozedur wird als Range delete bezeichnet . Auf diese Weise müssen Sie zwei Indizes angeben. Und die Prozedur löscht den Bereich von Elementen, die zwischen Startindex und Endindex liegen .

Wenn die Sammlung ein string-indiziertes assoziatives Array ist, sind der Startindex und der Endindex ein String; andernfalls sind Anfangs- und Endindex Integer.

Können wir die DELETE-Prozedur in der Oracle-Datenbank mit allen Sammlungen verwenden?

Ja, die Sammlungsmethode DELETE kann für alle drei Arten von Sammlungen verwendet werden. Dies sind – verschachtelte Tabellen, VARRAYs und assoziative Arrays.

Warte! Aber wenn wir die Prozedur DELETE mit VARRAYs verwenden, wird es dann nicht eine spärliche Sammlung erstellen?

Da VARRAY keine Sparse-Sammlung ist, können wir keine einzelnen Zeilen daraus löschen. Außerdem ist der einzige Prozeduraufruf, den wir mit VARRAY ausführen können, der erste. Das ist die Sammlungsmethode DELETE ohne Argumente, die alle Elemente aus der Sammlung entfernt. Die einzige Möglichkeit, eine einzelne Zeile aus einem VARRAY zu entfernen, besteht darin, sie an ihrem Ende mit einem anderen Prozeduraufruf TRIM.

zu kürzen

Können wir eine Ausnahme bei der Erfassungsmethode DELETE erwarten?

Ja, der PL/SQL-Erfassungsmethode DELETE ist eine Ausnahme zugeordnet. Wenn die Prozedur DELETE auf eine nicht initialisierte verschachtelte Tabelle und VARRAY angewendet wird, löst sie eine „Collection_is_Null“-Ausnahme aus.

Beispiele für die PL/SQL-Erfassungsmethode DELETE.

Sehen wir uns einige Beispiele für jeden der oben genannten Prozedur-DELETE-Aufrufe an.

Beispiel 1:Einfacher Prozeduraufruf ohne 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;
/

Der Aufruf der Sammlungsprozedur DELETE ohne Argument löscht alle Elemente der Sammlung, auf die sie angewendet wird. Ebenso haben wir im obigen Beispiel eine verschachtelte Tabelle mit dem Namen „my_nested_table“, auf die wir die Prozedur DELETE angewendet haben. Somit löscht der Prozeduraufruf bei erfolgreicher Ausführung alle 10 numerischen Elemente, die darin gespeichert sind.

Empfohlene Lektüre:Wie man eine verschachtelte Tabelle lokal für einen PL/SQL-Block erstellt.

Beispiel 2:Prozeduraufruf mit einem einzigen 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;
/

Dieser einzelne Parameter ist die gültige Indexnummer der Sammlung. Darüber hinaus wird die Sammelprozedur DELETE, die durch Übergeben einer gültigen Indexnummer aufgerufen wird, das Element des spezifischen Index entfernen. Im obigen Beispiel haben wir also 5 als Argument für die PL/SQL-Erfassungsmethode DELETE angegeben. Somit entfernt der Prozeduraufruf bei erfolgreicher Ausführung das Element aus der Sammlung, das bei Index 5 gespeichert ist.

Beispiel 3:Prozeduraufruf mit zwei Parametern.

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

Diese Art des Aufrufs der DELETE-Prozedur wird als Bereichslöschung bezeichnet. Hier müssen Sie zwei Indizes angeben und die Prozedur löscht den Bereich von Elementen, die zwischen Startindex und Endindex liegen. Im obigen Beispiel setzen wir den Startindex auf 2 und den Endindex auf 6. Das bedeutet, dass der Prozeduraufruf DELETE bei Ausführung alle Elemente entfernt, die in diesen Bereich fallen.

Fahren Sie fort und kopieren Sie die obigen Codes in Ihren SQL-Entwickler und führen Sie sie selbst aus, um zu sehen, was die Ausgaben sind.

Sie können sich auch das Video-Tutorial zum gleichen Thema ansehen, um alle oben genannten Beispiele live zu erklären.

Das ist das Tutorial zur PL/SQL-Erfassungsmethode DELETE in Oracle Database. Ich hoffe, Sie hatten Spaß beim Lesen und haben etwas Neues gelernt. Stellen Sie sicher, dass Sie diesen Blog in Ihren sozialen Medien teilen. Besuchen Sie mich auch auf meiner Facebook-Seite für weitere interessante Konzepte von PL/SQL.

Vielen Dank und einen schönen Tag!