Procedimiento PL/SQL para la Generación y Gestión de Informes de Ventas

Clasificado en Economía

Escrito el en español con un tamaño de 5,38 KB

Este documento detalla un procedimiento PL/SQL diseñado para la extracción, procesamiento y reporte de datos de ventas de libros, incluyendo un robusto manejo de errores. Es una herramienta fundamental para la gestión de datos económicos y la generación de informes de rendimiento comercial, permitiendo una visión clara de las operaciones de venta.

1. Declaración del Procedimiento y Variables

El procedimiento se inicia con la declaración de su estructura principal y las variables necesarias para almacenar temporalmente los datos de cada venta, así como los totales acumulados de cantidad e importe.

CREATE OR REPLACE PROCEDURE generar_listado_ventas IS
  -- Declaración de variables
  v_titulo VARCHAR2(100);
  v_autor VARCHAR2(100);
  v_venta NUMBER;
  v_importe NUMBER;
  v_total_cantidad NUMBER := 0;
  v_total_importe NUMBER := 0;

2. Definición del Cursor de Datos de Ventas

Se define un cursor explícito, c_ventas, para seleccionar los datos relevantes de la tabla libros_vendidos. Este cursor recupera el título del libro, el autor, la cantidad vendida y el importe de la venta.

  -- Cursor explícito para obtener los datos de ventas
  CURSOR c_ventas IS
    SELECT titulo, autor, venta, importe
    FROM libros_vendidos;

3. Lógica Principal del Procedimiento

La sección BEGIN contiene la lógica central del procedimiento, que abarca la apertura del cursor, el recorrido de los registros, el cálculo de totales y la impresión de los datos procesados.

3.1. Apertura y Recorrido del Cursor

El cursor c_ventas se abre y se itera sobre cada registro. Los valores de cada fila se obtienen y se asignan a las variables declaradas, continuando el bucle hasta que no se encuentren más registros.

BEGIN
  -- Abrir el cursor
  OPEN c_ventas;

  -- Recorrer los registros
  LOOP
    -- Obtener los valores del cursor
    FETCH c_ventas INTO v_titulo, v_autor, v_venta, v_importe;
    EXIT WHEN c_ventas%NOTFOUND;

3.2. Control de Errores y Procesamiento de Datos

Se implementa un control de errores para verificar la integridad de los datos. Si algún campo esencial (título, autor, venta, importe) está vacío, se registra un error en la tabla errlibro. De lo contrario, se calculan los totales acumulados y se imprimen los detalles de cada venta por pantalla.

    -- Control de errores por falta de datos
    IF v_titulo IS NULL OR v_autor IS NULL OR v_venta IS NULL OR v_importe IS NULL THEN
      -- Insertar en la tabla de errores
      INSERT INTO errlibro (isbnerr, descerr)
      VALUES ('Falta de datos', 'Campos vacíos en la venta de libros');
    ELSE
      -- Calcular totales
      v_total_cantidad := v_total_cantidad + v_venta;
      v_total_importe := v_total_importe + v_importe;

      -- Imprimir los datos por pantalla
      DBMS_OUTPUT.PUT_LINE('Título: ' || v_titulo);
      DBMS_OUTPUT.PUT_LINE('Autor: ' || v_autor);
      DBMS_OUTPUT.PUT_LINE('Venta: ' || v_venta);
      DBMS_OUTPUT.PUT_LINE('Importe: ' || v_importe);
      DBMS_OUTPUT.PUT_LINE('--------------------------------------');
    END IF;
  END LOOP;

3.3. Cierre del Cursor e Impresión de Totales

Una vez procesados todos los registros, el cursor se cierra para liberar recursos. Finalmente, se muestran los totales acumulados de la cantidad de libros vendidos y el importe total de las ventas.

  -- Cerrar el cursor
  CLOSE c_ventas;

  -- Imprimir los totales
  DBMS_OUTPUT.PUT_LINE('TOTAL VENDIDO:');
  DBMS_OUTPUT.PUT_LINE('Cantidad: ' || v_total_cantidad);
  DBMS_OUTPUT.PUT_LINE('Importe: ' || v_total_importe);

4. Manejo de Excepciones (Error Handling)

La sección EXCEPTION gestiona posibles errores que puedan ocurrir durante la ejecución del procedimiento, registrándolos en la tabla errlibro para su posterior revisión y depuración. Esto asegura la robustez del proceso de reporte.

  • WHEN DUP_VAL_ON_INDEX: Captura errores específicos relacionados con la inserción de valores duplicados en índices únicos.
  • WHEN OTHERS: Captura cualquier otra excepción no manejada explícitamente, como errores aritméticos o de otro tipo, proporcionando un mecanismo de recuperación general.
  EXCEPTION
    -- Control de errores
    WHEN DUP_VAL_ON_INDEX THEN
      -- Insertar en la tabla de errores por valores de índice duplicados
      INSERT INTO errlibro (isbnerr, descerr)
      VALUES ('Índice duplicado', 'Valores de índice duplicados en la venta de libros');
    WHEN OTHERS THEN
      -- Insertar en la tabla de errores por error aritmético
      INSERT INTO errlibro (isbnerr, descerr)
      VALUES ('Error aritmético', 'Error aritmético en la venta de libros');

5. Finalización del Procedimiento

El procedimiento concluye con la sentencia END, marcando el fin de su definición y ejecución.

END generar_listado_ventas;
/

Este procedimiento es un ejemplo práctico de cómo PL/SQL puede ser utilizado para la automatización de informes de ventas, una capacidad crucial para la toma de decisiones informadas en cualquier entorno económico o empresarial que dependa de datos precisos y oportunos.

Entradas relacionadas: