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?

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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: Tres

Tablas 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: Tres

Tablas 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 3

Usar 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *