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

Erfassungsmethoden:FIRST &LAST-Funktionen in der Oracle-Datenbank

Willkommen zurück zu der Serie über Erfassungsmethoden in Oracle Database. Bisher haben wir in dieser Reihe Collection Function Count ( ) und Collection Function Exist ( ) behandelt. Ich hoffe, Sie hatten Spaß beim Lesen. Heute lernen wir in diesem PL/SQL-Tutorial die Erfassungsmethoden First ( ) und Last ( ).

Was sind Erfassungsmethoden FIRST ( ) und LAST ( )?

Wir verwenden Sammlungsfunktionen First &Last, um den ersten und letzten in einer Sammlung definierten Indexwert zu kennen.

Können wir diese Sammlungsmethoden mit jeder Art von Sammlung verwenden?

Ja! Sie können diese beiden Funktionen mit allen drei Arten von Sammlungen verwenden, nämlich assoziatives Array, verschachtelte Tabelle und VARRAYs.

Wann geben die Erfassungsmethoden FIRST ( ) und LAST ( ) null zurück?

Beide Funktionen geben null zurück, wenn sie auf eine leere Sammlung angewendet werden oder wenn sie auf eine initialisierte Sammlung angewendet werden, die keine Elemente enthält.

Können Sie die Funktionsspezifikation für diese beiden Funktionen auflisten?

Sicher! Warum nicht. Die Spezifikation für die Sammelfunktion FIRST ( ) lautet:

FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2

Und die Funktionsspezifikation für die Sammlungsfunktion LAST ( ) lautet:

FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2

Info:
Für String-indizierte assoziative Arrays geben diese Methoden Strings zurück; „niedrigste“ und „höchste“ werden durch die Reihenfolge des Zeichensatzes bestimmt, der in dieser Sitzung verwendet wird.

Was ist, wenn mein VARRAY nur 1 Element enthält?

In diesem Fall ist die Sammelfunktion FIRST ( ) immer 1 und die Sammelmethode LAST ( ) ist immer gleich COUNT.

Was wäre, wenn ich diese Funktionen auf eine nicht initialisierte Sammlung anwenden würde?

Ich meine ernsthaft, warum würdest du das tun! Wie auch immer, wenn Sie die Sammlungsfunktion FIRST &LAST auf eine nicht initialisierte Sammlung angewendet haben, wird die Ausnahme COLLECTION_IS_NULL ausgelöst.

Beispiel:Wie verwendet man die Sammlungsfunktion FIRST und LAST mit Sammlung?

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
    DBMS_OUTPUT.PUT_LINE ('First Index of the Nested table is ' || col_var.FIRST);
    DBMS_OUTPUT.PUT_LINE ('Last Index of the Nested table is ' || col_var.LAST);
END;
/

Im obigen Beispiel haben wir eine verschachtelte Tabelle mit dem Namen NT_TAB erstellt und mit der Collection-Variablen col_var initialisiert. Diese verschachtelte Tabelle hat 5 Indizes, in denen wir die Werte gespeichert haben. Der niedrigste Index in dieser verschachtelten Tabelle ist 1, der den Wert 10 enthält, und der maximale Index ist 5 mit dem Wert 50. Somit ist bei der Ausführung das Ergebnis der ersten DBMS_OUTPUT-Anweisung 1 und der der zweiten DBMS_OUTPUT-Anweisung 5.

Kopieren Sie einfach den Code und sehen Sie sich das Ergebnis selbst an.

Was ist, wenn wir das erste Element der verschachtelten Tabelle löschen? Was wird dann die Ausgabe der Sammelfunktion FIRST sein?

Das ist eine sehr gute Frage! Wenn Sie das erste Element der Sammelfunktion löschen, gibt die Sammelfunktion FIRST den Index zurück, der größer als 1 ist und einige Daten enthält. Sehen wir uns das Beispiel an:

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
col_var.DELETE(1);
    DBMS_OUTPUT.PUT_LINE ('First Index after DELETE is ' || col_var.FIRST);
END;
/

Im obigen Beispiel haben wir das erste Element der verschachtelten Tabelle nt_tab mit der Sammelmethode DELETE gelöscht. Nach dem Löschen des ersten Elements, das 10 auf Index 1 ist, ist der neue niedrigste Index jetzt 2, in dem einige Daten gespeichert sind. Daher ist das Ergebnis bei der Ausführung 2.

Was ist, wenn ich das Element aus der Mitte der Sammlung lösche?

Wenn Sie die Daten aus der Mitte löschen, gibt die Sammelfunktion LAST einen Wert zurück, der größer ist als der Wert, der von der COUNT-Methode zurückgegeben wird.

Können wir die in den Indizes der Sammlung gespeicherten Daten sehen, die die FIRST- und LAST-Sammlungsmethoden verwenden?

Als ich dasselbe Konzept in einer Klasse erklärte, hob eine Schülerin ihre Hand und fragte mich.

Sir, bisher sehen wir, dass diese Funktionen die Indexnummer der Sammlung zurückgeben. Was ist, wenn wir die in diesen Indizes gespeicherten Daten sehen möchten? Gibt es eine Möglichkeit, die im Index gespeicherten Daten mit diesen Erfassungsmethoden FIRST &LAST anzuzeigen?

Die Antwort auf diese Frage lautet:Ja! Natürlich . Zusammen mit der Indexnummer können Sie diese Funktionen verwenden, um die Daten anzuzeigen, die im niedrigsten und höchsten Index der Sammlung gespeichert sind.

Zum Beispiel

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
    -- This output statement will return 10 which is the value stored at the first index
    DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.FIRST));
    -- This output statement will return 50 which is the value stored at the last index
    DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.LAST));
END;
/

Um die im ersten und letzten Index gespeicherten Daten zu sehen, müssen Sie nur die Funktionsaufrufe dieser Funktion in die Klammer der Sammlungsvariablen setzen, die col_var ist genau wie im obigen Beispiel.

Jetzt ist die Frage, was ist, wenn wir die Sammlung kürzen? Was wird dann die Ausgabe der Sammelfunktion LAST sein? Machen Sie weiter und sehen Sie sich das Video-Tutorial an wo ich erklärt habe, was die Ausgabe der Sammlungsmethode LAST sein wird, wenn Sie die Sammlung anhand des Beispiels trimmen.

Das ist alles über diese Sammelmethoden. Ich hoffe, Sie fanden diesen Blog nützlich. Vielen Dank und einen schönen Tag!