PL / SQL - Arrays
In diesem Kapitel werden Arrays in PL / SQL erläutert. Die PL / SQL-Programmiersprache bietet eine Datenstruktur namensVARRAY, die eine sequentielle Sammlung von Elementen desselben Typs mit fester Größe speichern kann. Ein Varray wird zum Speichern einer geordneten Sammlung von Daten verwendet. Oft ist es jedoch besser, sich ein Array als eine Sammlung von Variablen desselben Typs vorzustellen.
Alle Varrays bestehen aus zusammenhängenden Speicherstellen. Die niedrigste Adresse entspricht dem ersten Element und die höchste Adresse dem letzten Element.
Ein Array ist Teil von Daten vom Sammlungstyp und steht für Arrays variabler Größe. Wir werden in einem späteren Kapitel andere Sammlungstypen untersuchen'PL/SQL Collections'.
Jedes Element in a varrayist ein Index zugeordnet. Es hat auch eine maximale Größe, die dynamisch geändert werden kann.
Erstellen eines Varray-Typs
Mit dem wird ein Varray-Typ erstellt CREATE TYPEErklärung. Sie müssen die maximale Größe und den Typ der im Varray gespeicherten Elemente angeben.
Die grundlegende Syntax zum Erstellen eines VARRAY-Typs auf Schemaebene lautet:
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>
Wo,
- varray_type_name ist ein gültiger Attributname.
- n ist die Anzahl der Elemente (maximal) im Varray,
- element_type ist der Datentyp der Elemente des Arrays.
Die maximale Größe eines Varrays kann mit dem geändert werden ALTER TYPE Erklärung.
Zum Beispiel,
CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10);
/
Type created.
Die grundlegende Syntax zum Erstellen eines VARRAY-Typs innerhalb eines PL / SQL-Blocks lautet:
TYPE varray_type_name IS VARRAY(n) of <element_type>
Zum Beispiel -
TYPE namearray IS VARRAY(5) OF VARCHAR2(10);
Type grades IS VARRAY(5) OF INTEGER;
Lassen Sie uns nun einige Beispiele erarbeiten, um das Konzept zu verstehen -
Beispiel 1
Das folgende Programm veranschaulicht die Verwendung von Varrays -
DECLARE
type namesarray IS VARRAY(5) OF VARCHAR2(10);
type grades IS VARRAY(5) OF INTEGER;
names namesarray;
marks grades;
total integer;
BEGIN
names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
marks:= grades(98, 97, 78, 87, 92);
total := names.count;
dbms_output.put_line('Total '|| total || ' Students');
FOR i in 1 .. total LOOP
dbms_output.put_line('Student: ' || names(i) || '
Marks: ' || marks(i));
END LOOP;
END;
/
Wenn der obige Code an der SQL-Eingabeaufforderung ausgeführt wird, wird das folgende Ergebnis ausgegeben:
Total 5 Students
Student: Kavita Marks: 98
Student: Pritam Marks: 97
Student: Ayan Marks: 78
Student: Rishav Marks: 87
Student: Aziz Marks: 92
PL/SQL procedure successfully completed.
Please note - -
In der Oracle-Umgebung ist der Startindex für Varrays immer 1.
Sie können die Varray-Elemente mit der Konstruktormethode des Varray-Typs initialisieren, die denselben Namen wie das Varray hat.
Varrays sind eindimensionale Arrays.
Ein Varray ist beim Deklarieren automatisch NULL und muss initialisiert werden, bevor auf seine Elemente verwiesen werden kann.
Beispiel 2
Elemente eines Varrays können auch% ROWTYPE einer beliebigen Datenbanktabelle oder% TYPE eines beliebigen Datenbanktabellenfelds sein. Das folgende Beispiel veranschaulicht das Konzept.
Wir verwenden die in unserer Datenbank gespeicherte Tabelle CUSTOMERS als -
Select * from customers;
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
+----+----------+-----+-----------+----------+
Das folgende Beispiel verwendet cursor, die Sie in einem separaten Kapitel ausführlich behandeln werden.
DECLARE
CURSOR c_customers is
SELECT name FROM customers;
type c_list is varray (6) of customers.name%type;
name_list c_list := c_list();
counter integer :=0;
BEGIN
FOR n IN c_customers LOOP
counter := counter + 1;
name_list.extend;
name_list(counter) := n.name;
dbms_output.put_line('Customer('||counter ||'):'||name_list(counter));
END LOOP;
END;
/
Wenn der obige Code an der SQL-Eingabeaufforderung ausgeführt wird, wird das folgende Ergebnis ausgegeben:
Customer(1): Ramesh
Customer(2): Khilan
Customer(3): kaushik
Customer(4): Chaitali
Customer(5): Hardik
Customer(6): Komal
PL/SQL procedure successfully completed.