PL / SQL: matrices

En este capítulo, discutiremos las matrices en PL / SQL. El lenguaje de programación PL / SQL proporciona una estructura de datos llamada Varrey, que puede almacenar una colección secuencial y de tamaño fijo de elementos del mismo tipo. Varray se utiliza para almacenar un conjunto ordenado de datos, sin embargo, a menudo es mejor pensar en una matriz como una colección de variables del mismo tipo.

Todas las variantes se componen de ubicaciones de memoria contiguas. La dirección más baja corresponde al primer elemento y la dirección más alta corresponde al último elemento.

Variantes PL / SQL

Una matriz es parte de los datos del tipo de colección y denota matrices de tamaño variable. Exploraremos otros tipos de colecciones en el próximo capítulo. ‘Colecciones PL / SQL’

Cada elemento en varray tiene asociado un índice. También tiene un tamaño máximo que se puede cambiar dinámicamente.

Creación de un tipo Warrey

El tipo varray se crea con CREAR TIPO declaración. Debe especificar el tamaño y el tipo máximo de los elementos almacenados en el varray.

La sintaxis básica para crear un tipo VARRAY en el nivel de esquema es:

CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>

Dónde,

  • varray_type_name – un nombre de atributo válido,
  • PAG este es el número de elementos (máximo) en el varray,
  • tipo de elemento – tipo de datos de los elementos de la matriz.

El tamaño máximo de varray se puede cambiar con CAMBIAR TIPO declaración.

Por ejemplo,

CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10); 
/ 

Type created.

La sintaxis básica para crear un tipo VARRAY en un bloque PL / SQL es:

TYPE varray_type_name IS VARRAY(n) of <element_type>

Por ejemplo –

TYPE namearray IS VARRAY(5) OF VARCHAR2(10); 
Type grades IS VARRAY(5) OF INTEGER;

Trabajemos ahora en algunos ejemplos para comprender el concepto:

Ejemplo 1

El siguiente programa ilustra el uso de 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; 
/

Cuando el código anterior se ejecuta en la línea de comando SQL, da el siguiente resultado:

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. 

Por favor pon atención

  • En Oracle, el índice inicial para varrays es siempre 1.

  • Puede inicializar elementos varray utilizando un método constructor de tipo varray, que tiene el mismo nombre que varray.

  • Los warreys son matrices unidimensionales.

  • Cuando se declara, varray es automáticamente NULL y debe inicializarse antes de que se pueda hacer referencia a sus elementos.

Ejemplo 2

Los miembros de Varray también pueden ser el% ROWTYPE de cualquier tabla de la base de datos, o el% TYPE de cualquier campo en una tabla de la base de datos. El siguiente ejemplo ilustra este concepto.

Usaremos la tabla CLIENTES almacenada en nuestra base de datos como –

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 | 
+----+----------+-----+-----------+----------+ 

El siguiente ejemplo usa cursorque estudiará en detalle en un capítulo aparte.

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; 
/ 

Cuando el código anterior se ejecuta en la línea de comando SQL, da el siguiente resultado:

Customer(1): Ramesh  
Customer(2): Khilan  
Customer(3): kaushik     
Customer(4): Chaitali  
Customer(5): Hardik  
Customer(6): Komal  

PL/SQL procedure successfully completed. 

🚫