Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

VARRAYS

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

10/9/23, 20:37 VARIEDAD PL/SQL

VARIEDAD PL/SQL

Resumen : en este tutorial, aprenderá sobre PL/SQL VARRAY y cómo manipular elementos de
forma VARRAY efectiva.

Introducción a PL/SQLVARRAY

VARRAY representa la matriz de tamaño variable.

A VARRAY son colecciones unidimensionales de elementos con el mismo tipo de datos. A


diferencia de una matriz asociativa (https://www.oracletutorial.com/plsql-tutorial/plsql-associative-array/) y una
tabla anidada (https://www.oracletutorial.com/plsql-tutorial/plsql-nested-tables/) , VARRAY siempre tiene un
número fijo de elementos (limitados) y nunca tiene espacios entre los elementos (no escasos).

Declarar un VARRAYtipo

Para declarar un VARRAY tipo, utiliza esta sintaxis:

TYPE type_name IS VARRAY(max_elements)


OF element_type [NOT NULL];

En esta declaración:

type_name es el tipo de VARRAY .

max_elements es el número máximo de elementos permitidos en el VARRAY .

NOT NULL especifica que el elemento de VARRAY ese tipo no puede tener NULL elementos.

Tenga en cuenta que una VARRAY variable puede ser nula o no inicializada.

element_type es el tipo de elementos de la VARRAY variable del tipo.

Para crear un VARRAY tipo al que se pueda acceder globalmente en la base de datos, no solo en su
código PL/SQL, utilice la siguiente sintaxis:

CREATE [OR REPLACE ] TYPE type_name AS | IS

https://www.oracletutorial.com/plsql-tutorial/plsql-varray/ 1/10
10/9/23, 20:37 VARIEDAD PL/SQL

VARRAY(max_elements) OF element_type [NOT NULL];

En esta declaración, OR REPLACE modifica el tipo existente manteniendo todas las concesiones de
privilegios existentes.

Declarar e inicializar VARRAYvariables


Una vez que haya creado su propio VARRAY tipo, puede declarar una VARRAY instancia de ese tipo
haciendo referencia al VARRAY tipo. La sintaxis básica para VARRAY la declaración es:

varray_name type_name [:= type_name(...)];

En esta sintaxis:

El varray_name es el nombre del VARRAY .

El type_name es el VARRAY tipo.

Es type_name(...) el constructor del VARRAY tipo, que acepta una lista de elementos
separados por comas como argumentos. Tiene el mismo nombre que el VARRAY tipo.

Tenga en cuenta que antes de utilizar una VARRAY variable, debe inicializarla. De lo contrario,
recibirá el siguiente error:

ORA-06531: reference to uninitialized collection

Para inicializar una VARRAY variable en una colección vacía (cero elementos), utilice la siguiente
sintaxis:

varray_name type_name := type_name();

Si desea especificar elementos para la VARRAY variable mientras la inicializa, puede utilizar esta
sintaxis:

varray_name type_name := type_name(element1, element2, ...);

https://www.oracletutorial.com/plsql-tutorial/plsql-varray/ 2/10
10/9/23, 20:37 VARIEDAD PL/SQL

Accediendo a elementos de la matriz

Para acceder a un elemento de matriz, utilice la siguiente sintaxis:

varray_name(n);

n es el índice del elemento, que comienza con 1 y termina con el max_elements número máximo

de elementos definidos en el VARRAY tipo.

Si n no está en el rango (1, max_elements) , PL/SQL genera (https://www.oracletutorial.com/plsql-


tutorial/plsql-raise/) el SUBSCRIPT_BEYOND_COUNT error.

VARRAYEjemplos de PL/SQL

Tomemos algunos ejemplos del uso VARRAY de variables.

VARRAY1) Ejemplo sencillo de PL/SQL

El siguiente bloque ilustra un ejemplo simple del uso VARRAY de variables:

DECLARE
TYPE t_name_type IS VARRAY(2)
OF VARCHAR2(20) NOT NULL;
t_names t_name_type := t_name_type('John','Jane');
t_enames t_name_type := t_name_type();
BEGIN
-- initialize to an empty array
dbms_output.put_line("The number of elements in t_enames " || t_enames.COU

-- initialize to an array of a elements


dbms_output.put_line("The number of elements in t_names " || t_names.COUNT
END;
/

En este ejemplo:

Primero, declara un VARRAY of VARCHAR(2) con dos elementos:


https://www.oracletutorial.com/plsql-tutorial/plsql-varray/ 3/10
10/9/23, 20:37 VARIEDAD PL/SQL

TYPE t_name_type IS
VARRAY(2) OF VARCHAR2(20) NOT NULL;

A continuación, declare una VARRAY variable e inicialícela con VARRAY dos elementos:

t_names t_name_type := t_name_type('John','Jane');

Luego, declara otra VARRAY variable e inicialízala en una matriz vacía:

t_enames t_name_type := t_name_type();

Después de eso, use el COUNT método para obtener la cantidad de elementos en VARRAY
t_enames y mostrarlo.

dbms_output.put_line("The number of elements in t_enames " || t_enames.COUNT);

Finalmente, use el mismo COUNT método para obtener la cantidad de elementos en VARRAY
t_names e imprimirlo.

dbms_output.put_line("The number of elements in t_names " || t_names.COUNT);

Tenga en cuenta que puede asignar un VARRAY a otro usando la siguiente sintaxis:

varray_name := another_varray_name;

Por ejemplo:

t_enames := t_names;

PL/SQL copia todos los miembros t_names de t_enames .

2) Ejemplo de PL/SQL VARRAYde registros

Vea el siguiente ejemplo:

https://www.oracletutorial.com/plsql-tutorial/plsql-varray/ 4/10
10/9/23, 20:37 VARIEDAD PL/SQL

DECLARE
TYPE r_customer_type IS RECORD(
customer_name customers.NAME%TYPE,
credit_limit customers.credit_limit%TYPE
);

TYPE t_customer_type IS VARRAY(2)


OF r_customer_type;

t_customers t_customer_type := t_customer_type();


BEGIN
t_customers.EXTEND;
t_customers(t_customers.LAST).customer_name := 'ABC Corp';
t_customers(t_customers.LAST).credit_limit := 10000;

t_customers.EXTEND;
t_customers(t_customers.LAST).customer_name := 'XYZ Inc';
t_customers(t_customers.LAST).credit_limit := 20000;

dbms_output.put_line('The number of customers is ' || t_customers.COUNT);


END;
/

Primero, defina un tipo de registro (https://www.oracletutorial.com/plsql-tutorial/plsql-record/) que incluya dos


campos, nombre del cliente y límite de crédito.

TYPE r_customer_type IS RECORD(


customer_name customers.name%TYPE,
credit_limit customers.credit_limit%TYPE
);

A continuación, declare un VARRAY tipo de registro r_customer_type con el tamaño de dos:

TYPE t_customer_type IS VARRAY(2)

https://www.oracletutorial.com/plsql-tutorial/plsql-varray/ 5/10
10/9/23, 20:37 VARIEDAD PL/SQL

OF r_customer_type;

Luego, declara una VARRAY variable del VARRAY tipo t_customer_type :

t_customers t_customer_type := t_customer_type();

Después de eso, use el EXTEND método para agregar una instancia t_customers y el
LAST método para agregar un elemento al final del VARRAY t_customers

t_customers.EXTEND;
t_customers(t_customers.LAST).customer_name := 'ABC Corp';
t_customers(t_customers.LAST).credit_limit := 10000;

t_customers.EXTEND;
t_customers(t_customers.LAST).customer_name := 'XYZ Inc';
t_customers(t_customers.LAST).credit_limit := 20000;

Finalmente, use el COUNT método para obtener la cantidad de elementos en la matriz:

dbms_output.put_line('The number of customers is ' || t_customers.COUNT);

Aquí está la salida del bloque:

The number of customers is 2

3) Agregar elementos VARRAYdesde un ejemplo de cursor

El siguiente ejemplo utiliza un cursor (https://www.oracletutorial.com/plsql-tutorial/plsql-cursor/) para


recuperar cinco clientes que tienen los créditos más altos de la customers tabla y agregar datos a
VARRAY :

https://www.oracletutorial.com/plsql-tutorial/plsql-varray/ 6/10
10/9/23, 20:37 VARIEDAD PL/SQL

DECLARE
TYPE r_customer_type IS RECORD(
customer_name customers.name%TYPE,
credit_limit customers.credit_limit%TYPE
);

TYPE t_customer_type IS VARRAY(5)


OF r_customer_type;

t_customers t_customer_type := t_customer_type();

CURSOR c_customer IS
SELECT NAME, credit_limit
FROM customers
ORDER BY credit_limit DESC
FETCH FIRST 5 ROWS ONLY;
BEGIN
-- fetch data from a cursor
FOR r_customer IN c_customer LOOP
t_customers.EXTEND;
t_customers(t_customers.LAST).customer_name := r_customer.name;
t_customers(t_customers.LAST).credit_limit := r_customer.credit_limit
END LOOP;

-- show all customers


FOR l_index IN t_customers .FIRST..t_customers.LAST
LOOP
dbms_output.put_line(
'The customer ' ||

https://www.oracletutorial.com/plsql-tutorial/plsql-varray/ 7/10
10/9/23, 20:37 VARIEDAD PL/SQL

t_customers(l_index).customer_name ||
' has a credit of ' ||
t_customers(l_index).credit_limit
);
END LOOP;

END;
/

En este ejemplo:

Primero, declara un tipo de registro, un VARRAY tipo de registro con 5 elementos y una
VARRAY variable de ese VARRAY tipo:

TYPE r_customer_type IS RECORD(


customer_name customers.name%TYPE,
credit_limit customers.credit_limit%TYPE
);

TYPE t_customer_type IS VARRAY(5)


OF r_customer_type;

t_customers t_customer_type := t_customer_type();

En segundo lugar, declara un cursor que recupere 5 clientes con los créditos más altos:

CURSOR c_customer IS
SELECT name, credit_limit
FROM customers
ORDER BY credit_limit DESC
FETCH FIRST 5 ROWS ONLY;

En tercer lugar, procese el cursor y agregue cada elemento a VARRAY t_customers :

https://www.oracletutorial.com/plsql-tutorial/plsql-varray/ 8/10
10/9/23, 20:37 VARIEDAD PL/SQL

FOR r_customer IN c_customer LOOP


t_customers.EXTEND;
t_customers(t_customers.LAST).customer_name := r_customer.name;
t_customers(t_customers.LAST).credit_limit := r_customer.credit_limit;
END LOOP;

Finalmente, repita los elementos de VARRAY t_customers e imprima el nombre y el crédito del

cliente:

FOR l_index IN t_customers .FIRST..t_customers.LAST


LOOP
dbms_output.put_line(
'The customer ' ||
t_customers(l_index).customer_name ||
' has a credit of ' ||
t_customers(l_index).credit_limit
);
END LOOP;

Aquí está el resultado:

The customer General Mills has a credit of 179916.92


The customer NextEra Energy has a credit of 141953.76
The customer Southern has a credit of 127665.21
The customer Jabil Circuit has a credit of 113340.75
The customer Progressive has a credit of 94989.78

Eliminar elementos

Para eliminar todos los elementos de a VARRAY , utiliza el DELETE método:

varray_name.DELETE;

Para eliminar un elemento del final de a VARRAY , utiliza el TRIM método:

https://www.oracletutorial.com/plsql-tutorial/plsql-varray/ 9/10
10/9/23, 20:37 VARIEDAD PL/SQL

varray_name.TRIM;

Para eliminar n elementos del final de a VARRAY , utiliza el TRIM(n) método:

varray_name.TRIM(n)

En este tutorial, ha aprendido sobre PL/SQL VARRAY y cómo manipular elementos de forma
VARRAY efectiva.

https://www.oracletutorial.com/plsql-tutorial/plsql-varray/ 10/10

También podría gustarte