PL/SQL - Sammlungen: Dein Tor zu effizienter Datenverarbeitung

Hallo da draußen, ambitionierte PL/SQL-Entwickler! Ich freue mich sehr, euch durch die faszinierende Welt der PL/SQL-Sammlungen zu führen. Als euer freundlicher Nachbarschafts-Computerlehrer mit jahrelanger Erfahrung verspreche ich, dass diese Reise sowohl aufhellend als auch unterhaltsam sein wird. Also, holt euch eure virtuellen Notizblöcke und tauchen wir ein!

PL/SQL - Collections

Was sind PL/SQL-Sammlungen?

Bevor wir uns den Details widmen, lassen Sie uns verstehen, was Sammlungen sind. Stellt euch vor, ihr organisiert eine Geburtstagsfeier und müsst die Namen aller Gäste tracken. Wär es nicht einfacher, eine einzige Liste zu haben, anstatt jeden Namen auf ein separates Stück Papier zu schreiben? Genau das tun Sammlungen in PL/SQL – sie erlauben uns, verwandte Daten zusammenzufassen.

Nun, lassen Sie uns die Arten von Sammlungen erkunden, die PL/SQL uns bietet.

H2: Index-by-Tabelle (Assoziatives Array)

Die Index-by-Tabelle, auch bekannt als assoziatives Array, ist wie ein magisches Adressbuch. Statt nur Namen zu speichern, könnt ihr jedem Namen zusätzliche Informationen zuordnen.

H3: Deklaration einer Index-by-Tabelle

Lassen Sie uns unsere erste Index-by-Tabelle erstellen:

DECLARE
TYPE guest_list_type IS TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(20);
guest_list guest_list_type;
BEGIN
guest_list('Alice') := 'Kuchen mitbringen';
guest_list('Bob') := 'Balloons mitbringen';
guest_list('Charlie') := 'Musik mitbringen';

DBMS_OUTPUT.PUT_LINE('Alice bringt ' || guest_list('Alice'));
END;

In diesem Beispiel haben wir eine Gästeliste erstellt, bei der jeder Gast (der Index) mit dem was er zur Party mitbringt, assoziiert ist. Wenn wir diesen Code ausführen, wird er ausgeben: "Alice bringt Kuchen mitbringen".

H3: Durchlaufen einer Index-by-Tabelle

Nun sehen wir, wie wir durch unsere Gästeliste gehen können:

DECLARE
TYPE guest_list_type IS TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(20);
guest_list guest_list_type;
guest VARCHAR2(20);
BEGIN
guest_list('Alice') := 'Kuchen mitbringen';
guest_list('Bob') := 'Balloons mitbringen';
guest_list('Charlie') := 'Musik mitbringen';

guest := guest_list.FIRST;
WHILE guest IS NOT NULL LOOP
DBMS_OUTPUT.PUT_LINE(guest || ' bringt ' || guest_list(guest));
guest := guest_list.NEXT(guest);
END LOOP;
END;

Dieser Code wird alle unsere Gäste und was sie mitbringen auflisten. Es ist wie das Durchgehen deiner Party-Checkliste!

H2: verschachtelte Tabellen

Verschachtelte Tabellen sind wie erweiterbare Listen. Stellt euch vor, ihr plant mehrere Partys, und jede Party hat ihre eigene Gästeliste, die wachsen oder schrumpfen kann.

H3: Deklaration und Initialisierung einer verschachtelten Tabelle

Lassen Sie uns eine verschachtelte Tabelle für unsere Partyplanung erstellen:

DECLARE
TYPE guest_list_type IS TABLE OF VARCHAR2(50);
birthday_party guest_list_type := guest_list_type('Alice', 'Bob', 'Charlie');
BEGIN
DBMS_OUTPUT.PUT_LINE('Erster Gast: ' || birthday_party(1));
birthday_party.EXTEND;
birthday_party(4) := 'David';
DBMS_OUTPUT.PUT_LINE('Neuer Gast: ' || birthday_party(4));
END;

Hier beginnen wir mit drei Gästen und fügen dann einen vierten hinzu. Die Ausgabe wird zeigen "Erster Gast: Alice" und "Neuer Gast: David".

H2: Sammlungsmethoden

Sammlungen verfügen über integrierte Methoden, die unser Leben einfacher machen. Denkt daran als spezielle Kräfte zum Handling unserer Listen.

H3: Gemeinsame Sammlungsmethoden

Hier ist eine Tabelle mit einigen gemeinsamen Sammlungsmethoden:

Methode Beschreibung
COUNT Gibt die Anzahl der Elemente zurück
FIRST Gibt den Index des ersten Elements zurück
LAST Gibt den Index des letzten Elements zurück
NEXT Gibt den Index des nächsten Elements zurück
PRIOR Gibt den Index des vorherigen Elements zurück
EXISTS Prüft, ob ein Element an einem bestimmten Index exists
EXTEND Fügt eine oder mehrere Elemente an das Ende der Sammlung hinzu
TRIM Entfernt eine oder mehrere Elemente vom Ende der Sammlung
DELETE Entfernt Elemente aus der Sammlung

Lassen Sie uns einige davon in Aktion sehen:

DECLARE
TYPE number_list_type IS TABLE OF NUMBER;
numbers number_list_type := number_list_type(10, 20, 30, 40, 50);
BEGIN
DBMS_OUTPUT.PUT_LINE('Anzahl der Elemente: ' || numbers.COUNT);
DBMS_OUTPUT.PUT_LINE('Erstes Element: ' || numbers(numbers.FIRST));
DBMS_OUTPUT.PUT_LINE('Letztes Element: ' || numbers(numbers.LAST));

numbers.DELETE(3);  -- Löscht das dritte Element

IF NOT numbers.EXISTS(3) THEN
DBMS_OUTPUT.PUT_LINE('Element 3 existiert nicht mehr!');
END IF;
END;

Dieser Code demonstrates die Anzahl der Elemente, den Zugriff auf das erste und letzte Element, das Löschen eines Elements und das Prüfen der Existenz eines Elements.

H2: Sammlungsausnahmen

Selbst die besten Pläne können danebengehen, und das gilt auch für Sammlungen. PL/SQL bietet spezifische Ausnahmen, um uns zu helfen, Sammlungsbezogene Fehler elegant zu behandeln.

H3: Gemeinsame Sammlungsausnahmen

Ausnahme Beschreibung
COLLECTION_IS_NULL Wird ausgelöst, wenn versucht wird, auf eine null Sammlung zu operieren
NO_DATA_FOUND Wird ausgelöst, wenn auf ein nicht existierendes Element zugegriffen wird
SUBSCRIPT_BEYOND_COUNT Wird ausgelöst, wenn auf ein Element außerhalb der aktuellen Größe zugegriffen wird
SUBSCRIPT_OUTSIDE_LIMIT Wird ausgelöst, wenn ein Index außerhalb des zulässigen Bereichs verwendet wird

Lassen Sie uns sehen, wie wir diese Ausnahmen behandeln können:

DECLARE
TYPE number_list_type IS TABLE OF NUMBER;
numbers number_list_type;
BEGIN
-- Dies wird COLLECTION_IS_NULL auslösen
numbers(1) := 10;
EXCEPTION
WHEN COLLECTION_IS_NULL THEN
DBMS_OUTPUT.PUT_LINE('Hoppla! Die Sammlung ist null. Lassen wir sie initialisieren.');
numbers := number_list_type(10, 20, 30);
DBMS_OUTPUT.PUT_LINE('Jetzt haben wir ' || numbers.COUNT || ' Elemente.');
END;

Dieser Code versucht, ein Element zu einer null Sammlung hinzuzufügen, fängt die Ausnahme ab und initialisiert dann die Sammlung ordnungsgemäß.

Zusammenfassend sind PL/SQL-Sammlungen mächtige Werkzeuge, die uns die effiziente Verwaltung von Daten grupos erlauben. Ob ihr eine Party plant oder komplexe Datenbankoperationen durchführt, das Beherrschen von Sammlungen wird eure PL/SQL-Reise erheblich glatter machen.

Denkt daran, Übung macht den Meister! Versucht, eigene Sammlungen zu erstellen, experimentiert mit verschiedenen Methoden und habt keine Angst vor Ausnahmen – sie sind da, um euch zu helfen, robuster Code zu schreiben.

Happy Coding, zukünftige PL/SQL-Zauberer!

Credits: Image by storyset