Las colecciones son estructuras de datos fundamentales en PL/SQL que permiten almacenar conjuntos de elementos relacionados. Son similares a los arrays en otros lenguajes de programación, pero ofrecen una flexibilidad y funcionalidad mucho mayor. En esta entrada, vamos a conocer los diferentes tipos de colecciones en PL/SQL y cómo trabajar con ellas de manera eficiente.
Porqué usar colecciones?
- Almacenamiento de datos: Las colecciones permiten almacenar múltiples valores relacionados en una sola variable, lo que facilita la gestión y manipulación de conjuntos de datos.
- Acceso rápido a los datos: Las colecciones indexadas permiten acceder rápidamente a los elementos a través de un índice o una clave, lo que mejora el rendimiento en comparación con otras estructuras de datos.
- Flexibilidad: Las colecciones en PL/SQL son altamente flexibles y pueden cambiar de tamaño dinámicamente según sea necesario, lo que las hace adecuadas para una amplia gama de situaciones.
- Eficiencia en el código: El uso de colecciones puede simplificar y reducir la cantidad de código necesario para manipular conjuntos de datos en comparación con el uso de variables individuales.
- Compatibilidad con SQL: Las colecciones pueden utilizarse en conjunto con consultas SQL para procesar y manipular conjuntos de datos directamente en la base de datos, lo que puede mejorar el rendimiento y la eficiencia de las operaciones.
Tipos de colecciones en PL/SQL
1. Arrays
Los arrays en PL/SQL son estructuras de datos indexadas que permiten almacenar elementos del mismo tipo. Se definen utilizando la declaración TYPE y pueden ser de tamaño fijo o dinámico.
TYPE array_type IS TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER;
2. Tablas indexadas por índice
Estas son tablas que se pueden indexar por un valor entero, similar a los arrays, pero con mayor flexibilidad en cuanto a su tamaño y manipulación.
TYPE index_tab_type IS TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER;
3. Tablas indexadas por clave
Estas son tablas que se pueden indexar por un valor clave, lo que permite un acceso más rápido a los elementos.
TYPE key_tab_type IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(30);
Operaciones comunes con colecciones
– Inicialización
Es importante inicializar las colecciones antes de usarlas para evitar errores. Para hacerlo es necesario utilizar la cláusula DEFAULT en la declaración de la variable o utilizando el método EXTEND para las tablas dinámicas.
DECLARE my_array array_type := array_type(); BEGIN my_array.EXTEND(5); END;
– Recorrido
Para recorrer una coleccion es necesario usar bucles como FOR, WHILE o LOOP, dependiendo de la necesidad.
FOR i IN my_array.FIRST..my_array.LAST LOOP
DBMS_OUTPUT.PUT_LINE('Elemento ' || i || ': ' || my_array(i));
END LOOP;– Manipulación
Las colecciones en PL/SQL ofrecen una serie de métodos para manipular sus elementos, como INSERT, DELETE, UPDATE, entre otros.
my_array.INSERT(3, 'Nuevo elemento'); my_array.DELETE(2);
– Conversión
Se puede convertir una colección en un tipo de datos compatible, como una cadena de caracteres, utilizando la función CAST.
DECLARE my_string VARCHAR2(100); BEGIN my_string := CAST(my_array AS VARCHAR2(100)); END;
Casos de uso
Después de entender la declaración, inicialización, recorrido y manipulación de las 3 diferentes colecciones, veamos los siguientes ejemplos de trabajo usando todo:
Arrays
DECLARE
TYPE array_type IS TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER;
my_array array_type;
BEGIN
my_array(1) := 'Uno';
my_array(2) := 'Dos';
my_array(3) := 'Tres';
FOR i IN my_array.FIRST..my_array.LAST LOOP
DBMS_OUTPUT.PUT_LINE('Elemento ' || i || ': ' || my_array(i));
END LOOP;
END;
/Salida:
Elemento 1: Uno
Elemento 2: Dos
Elemento 3: TresTablas indexadas por índice
DECLARE
TYPE index_tab_type IS TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER;
my_table index_tab_type;
BEGIN
my_table(1) := 'Uno';
my_table(2) := 'Dos';
my_table(3) := 'Tres';
FOR i IN my_table.FIRST..my_table.LAST LOOP
DBMS_OUTPUT.PUT_LINE('Elemento ' || i || ': ' || my_table(i));
END LOOP;
END;
/Salida:
Elemento 1: Uno
Elemento 2: Dos
Elemento 3: TresTablas indexadas por clave
DECLARE
TYPE key_tab_type IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(30);
my_table key_tab_type;
BEGIN
my_table('clave1') := 'Valor 1';
my_table('clave2') := 'Valor 2';
my_table('clave3') := 'Valor 3';
FOR i IN my_table.FIRST..my_table.LAST LOOP
DBMS_OUTPUT.PUT_LINE('Elemento ' || i || ': ' || my_table(i));
END LOOP;
END;
/Salida:
Elemento clave1: Valor 1
Elemento clave2: Valor 2
Elemento clave3: Valor 3Usar colecciones en PL/SQL nos ayuda a almacenar y manipular conjuntos de datos de manera más eficiente. Al comprender los diferentes tipos de colecciones y cómo trabajar con ellas, se puede mejorar significativamente la eficacia y claridad de nuestro código PL/SQL.
