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.