PL/SQL bietet mehrere Sammelarten zum Verwalten von Gruppen verwandter Daten und verbessert die Code -Effizienz und -lesbarkeit. Dazu gehören verschachtelte Tabellen, assoziative Arrays (Index-By-Tabellen) und Aufzeichnungen. Lassen Sie uns jeweils untersuchen:
Aufzeichnungen: Datensätze ähneln Strukturen in anderen Sprachen. Sie gruppieren Elemente verschiedener Datentypen unter einem einzigen Namen. Sie werden mit einer TYPE
deklariert und dann zum Deklarieren von Variablen verwendet.
<code class="sql">DECLARE TYPE employee_record IS RECORD ( employee_id NUMBER, employee_name VARCHAR2(50), salary NUMBER ); emp employee_record; BEGIN emp.employee_id := 123; emp.employee_name := 'John Doe'; emp.salary := 60000; DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp.employee_id); END; /</code>
Verschachtelte Tabellen: Verschachtelte Tabellen sind bestellte Sammlungen homogener Datentypen. Sie ermöglichen Listen mit variabler Länge.
<code class="sql">DECLARE TYPE num_list IS TABLE OF NUMBER; numbers num_list := num_list(1, 2, 3, 4, 5); BEGIN FOR i IN numbers.FIRST .. numbers.LAST LOOP DBMS_OUTPUT.PUT_LINE(numbers(i)); END LOOP; END; /</code>
Assoziative Arrays (Index-By-Tabellen): Diese ähneln Hash-Karten oder Wörterbüchern in anderen Sprachen. Sie speichern Schlüsselwertpaare, wobei Tasten ein Subtyp von PLS_INTEGER
haben müssen und Werte jeder Datentyp sein können.
<code class="sql">DECLARE TYPE emp_salary IS TABLE OF NUMBER INDEX BY VARCHAR2(50); salaries emp_salary; BEGIN salaries('John Doe') := 60000; salaries('Jane Smith') := 75000; DBMS_OUTPUT.PUT_LINE('John Doe salary: ' || salaries('John Doe')); END; /</code>
Die Auswahl des entsprechenden Sammlungstyps hängt von Ihren spezifischen Anforderungen ab. Datensätze sind ideal für die Gruppierung von Datenelementen, verschachtelte Tabellen für bestellte Listen und assoziative Arrays für Schlüsselwertsuche.
Die Auswirkungen der Leistung der Verwendung verschiedener Sammelarten variieren je nach Verwendung und der Größe der Daten. Allgemein:
Die Größe der Sammlungen und die Häufigkeit der Operationen (Einfügungen, Löschungen, Suchabläufe) beeinflussen die Gesamtleistung stark. Erwägen Sie, bei extrem großen Datensätzen Zugriffsmuster zu optimieren und möglicherweise alternative Ansätze wie materialisierte Ansichten oder pipelierte Funktionen zu verwenden.
Das Übergeben von Sammlungen als Parameter effizient beinhaltet das Verständnis der verschiedenen Verabschiedungsmodi (in, nach außen) und die Auswahl der entsprechenden Methode basierend auf Ihren Anforderungen. Die Verwendung von %ROWTYPE
-Attributen erhöht gegebenenfalls auch die Leistung.
In Parametern: Dies ist die häufigste Art, Sammlungen zu bestehen. Die Sammlung wird als schreibgeschütztes Wert übergeben. Das Verfahren oder die Funktion empfängt eine Kopie der Sammlung, die für kleinere Sammlungen effizient sein kann, aber für sehr große weniger effizient sein kann.
OUT -Parameter: Die Prozedur oder Funktion ändert die Sammlung und gibt die geänderte Version zurück.
In Out -Parametern: Die Sammlung wird in der Prozedur oder Funktion übergeben und geändert, und die geänderte Version wird zurückgegeben.
Beispiel verwenden in Parameter:
<code class="sql">CREATE OR REPLACE PROCEDURE process_numbers (numbers IN num_list) IS BEGIN -- Process the numbers collection END; /</code>
Betrachten Sie für sehr große Sammlungen sie durch Referenz mit Objekttypen, anstatt die Sammlung direkt zu übergeben. Dies kann den Speicheraufwand des Kopierens großer Datensätze verringern.
Ja, Sammlungen können die Effizienz Ihres PL/SQL -Code auf verschiedene Weise erheblich verbessern:
Beispiel für eine verbesserte Effizienz:
Anstelle dieses ineffizienten Ansatzes:
<code class="sql">FOR i IN 1..1000 LOOP SELECT column1 INTO variable1 FROM table1 WHERE id = i; -- Process variable1 END LOOP;</code>
Verwenden Sie diesen effizienteren Ansatz mit einer verschachtelten Tabelle:
<code class="sql">DECLARE TYPE num_list IS TABLE OF NUMBER; data num_list; BEGIN SELECT id BULK COLLECT INTO data FROM table1 WHERE id BETWEEN 1 AND 1000; FOR i IN data.FIRST .. data.LAST LOOP -- Process data(i) END LOOP; END; /</code>
Durch die Verwendung von BULK COLLECT INTO
in eine einzelne Datenbank -Rundreise holen Sie alle 1000 IDs ab, wodurch die Leistung erheblich verbessert wird. Dieses Prinzip gilt auch für andere Datenbankvorgänge. Denken Sie daran, den entsprechenden Sammlungstyp für eine optimale Leistung basierend auf Ihrer Datenstruktur und -zugriffsmustern auszuwählen.
Das obige ist der detaillierte Inhalt vonWie verwende ich Sammlungen in PL/SQL (Arrays, Datensätze, Tabellen)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!