La sentencia FORALL en PL/SQL es una característica poderosa que permite realizar operaciones DML (Data Manipulation Language) en masa, como INSERT, UPDATE y DELETE, de manera eficiente. Esta sentencia es especialmente útil cuando se necesita procesar grandes volúmenes de datos, ya que reduce el número de cambios de contexto entre PL/SQL y SQL, mejorando así el rendimiento.

Conceptos Clave

  • Operaciones en Masa: La sentencia FORALL permite ejecutar una operación DML en múltiples filas con una sola llamada.
  • Colecciones: FORALL trabaja con colecciones PL/SQL (como tablas anidadas, VARRAYs o índices por tabla).
  • Rendimiento: Al reducir el número de cambios de contexto, FORALL puede mejorar significativamente el rendimiento de las operaciones DML en masa.

Sintaxis Básica

La sintaxis básica de la sentencia FORALL es la siguiente:

FORALL índice IN límites
    sentencia_dml;
  • índice: Un índice que se utiliza para iterar sobre los elementos de la colección.
  • límites: Un rango de valores que define el inicio y el fin de la iteración.
  • sentencia_dml: La operación DML que se ejecutará en cada iteración.

Ejemplo Práctico

A continuación, se muestra un ejemplo práctico de cómo utilizar la sentencia FORALL para insertar múltiples filas en una tabla:

Paso 1: Crear la Tabla de Ejemplo

Primero, creamos una tabla simple para almacenar los datos:

CREATE TABLE empleados (
    id NUMBER,
    nombre VARCHAR2(50),
    salario NUMBER
);

Paso 2: Declarar la Colección y la Sentencia FORALL

Luego, declaramos una colección PL/SQL y utilizamos la sentencia FORALL para insertar datos en la tabla:

DECLARE
    TYPE empleados_tabla IS TABLE OF empleados%ROWTYPE;
    empleados_lista empleados_tabla := empleados_tabla();
BEGIN
    -- Agregar datos a la colección
    empleados_lista.EXTEND(3);
    empleados_lista(1).id := 1;
    empleados_lista(1).nombre := 'Juan';
    empleados_lista(1).salario := 3000;
    
    empleados_lista(2).id := 2;
    empleados_lista(2).nombre := 'Ana';
    empleados_lista(2).salario := 3500;
    
    empleados_lista(3).id := 3;
    empleados_lista(3).nombre := 'Luis';
    empleados_lista(3).salario := 4000;
    
    -- Utilizar FORALL para insertar datos en la tabla
    FORALL i IN 1..empleados_lista.COUNT
        INSERT INTO empleados VALUES empleados_lista(i);
    
    COMMIT;
END;

Explicación del Código

  1. Declaración de la Colección: Se declara un tipo de tabla anidada empleados_tabla que es una colección de filas de la tabla empleados.
  2. Inicialización de la Colección: Se inicializa la colección empleados_lista y se agregan tres registros.
  3. Sentencia FORALL: Se utiliza FORALL para iterar sobre la colección y ejecutar la sentencia INSERT para cada elemento de la colección.
  4. COMMIT: Se confirma la transacción para asegurar que los datos se guarden en la tabla.

Ejercicio Práctico

Ejercicio

Crea una tabla llamada productos con las siguientes columnas: id (NUMBER), nombre (VARCHAR2(50)), y precio (NUMBER). Luego, escribe un bloque PL/SQL que utilice la sentencia FORALL para insertar al menos cinco productos en la tabla.

Solución

-- Crear la tabla productos
CREATE TABLE productos (
    id NUMBER,
    nombre VARCHAR2(50),
    precio NUMBER
);

-- Bloque PL/SQL para insertar productos usando FORALL
DECLARE
    TYPE productos_tabla IS TABLE OF productos%ROWTYPE;
    productos_lista productos_tabla := productos_tabla();
BEGIN
    -- Agregar datos a la colección
    productos_lista.EXTEND(5);
    productos_lista(1).id := 1;
    productos_lista(1).nombre := 'Producto A';
    productos_lista(1).precio := 100;
    
    productos_lista(2).id := 2;
    productos_lista(2).nombre := 'Producto B';
    productos_lista(2).precio := 200;
    
    productos_lista(3).id := 3;
    productos_lista(3).nombre := 'Producto C';
    productos_lista(3).precio := 300;
    
    productos_lista(4).id := 4;
    productos_lista(4).nombre := 'Producto D';
    productos_lista(4).precio := 400;
    
    productos_lista(5).id := 5;
    productos_lista(5).nombre := 'Producto E';
    productos_lista(5).precio := 500;
    
    -- Utilizar FORALL para insertar datos en la tabla
    FORALL i IN 1..productos_lista.COUNT
        INSERT INTO productos VALUES productos_lista(i);
    
    COMMIT;
END;

Resumen

En esta sección, hemos aprendido sobre la sentencia FORALL en PL/SQL, que permite realizar operaciones DML en masa de manera eficiente. Hemos visto la sintaxis básica y un ejemplo práctico de cómo utilizar FORALL para insertar múltiples filas en una tabla. Además, hemos proporcionado un ejercicio práctico para reforzar los conceptos aprendidos.

En el siguiente módulo, exploraremos conceptos avanzados de PL/SQL, incluyendo procedimientos almacenados, funciones, paquetes y disparadores.

© Copyright 2024. Todos los derechos reservados