En este módulo, exploraremos las mejores prácticas para escribir código PL/SQL eficiente, mantenible y seguro. Estas prácticas no solo mejorarán la calidad de tu código, sino que también facilitarán su mantenimiento y optimización a largo plazo.

  1. Escribir Código Claro y Legible

1.1. Nombres Significativos

  • Variables y Constantes: Usa nombres descriptivos que indiquen claramente el propósito de la variable.

    DECLARE
      v_employee_name VARCHAR2(100); -- Correcto
      v_en VARCHAR2(100); -- Incorrecto
    
  • Procedimientos y Funciones: Los nombres deben reflejar la acción que realizan.

    PROCEDURE calculate_salary IS -- Correcto
    PROCEDURE calc_sal IS -- Incorrecto
    

1.2. Comentarios

  • Comentarios en Línea: Úsalos para explicar partes complejas del código.

    -- Calcular el salario anual
    v_annual_salary := v_monthly_salary * 12;
    
  • Comentarios de Bloque: Úsalos para describir secciones completas del código.

    /*
      Este bloque de código calcula el salario anual
      basado en el salario mensual.
    */
    v_annual_salary := v_monthly_salary * 12;
    

  1. Estructura y Organización del Código

2.1. Indentación y Espaciado

  • Consistencia: Mantén una indentación consistente para mejorar la legibilidad.
    BEGIN
        IF condition THEN
            -- Código aquí
        ELSE
            -- Código aquí
        END IF;
    END;
    

2.2. Modularización

  • Procedimientos y Funciones: Divide el código en procedimientos y funciones reutilizables.
    PROCEDURE calculate_bonus IS
    BEGIN
        -- Código para calcular el bono
    END calculate_bonus;
    

  1. Manejo de Excepciones

3.1. Captura de Excepciones

  • Específicas: Captura excepciones específicas antes de las generales.
    BEGIN
        -- Código que puede lanzar una excepción
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            -- Manejo específico
        WHEN OTHERS THEN
            -- Manejo general
    END;
    

3.2. Registro de Errores

  • Logging: Registra los errores en una tabla de auditoría para análisis posterior.
    EXCEPTION
        WHEN OTHERS THEN
            INSERT INTO error_log (error_message, error_time)
            VALUES (SQLERRM, SYSDATE);
    

  1. Optimización del Código

4.1. Uso de Cursores

  • Cursores Implícitos vs Explícitos: Usa cursores implícitos para operaciones simples y explícitos para operaciones complejas.
    -- Cursor implícito
    SELECT column INTO variable FROM table WHERE condition;
    
    -- Cursor explícito
    CURSOR c IS SELECT column FROM table WHERE condition;
    

4.2. Colección Masiva

  • Bulk Collect: Usa BULK COLLECT para mejorar el rendimiento al manejar grandes volúmenes de datos.
    DECLARE
        TYPE t_emp IS TABLE OF employees%ROWTYPE;
        l_emps t_emp;
    BEGIN
        SELECT * BULK COLLECT INTO l_emps FROM employees;
    END;
    

  1. Seguridad

5.1. Principio de Menor Privilegio

  • Roles y Permisos: Asigna solo los permisos necesarios a los usuarios y roles.
    GRANT SELECT, INSERT ON employees TO hr_user;
    

5.2. Validación de Entradas

  • Sanitización: Valida y sanitiza todas las entradas del usuario para prevenir inyecciones SQL.
    PROCEDURE safe_insert(p_name IN VARCHAR2) IS
    BEGIN
        IF p_name IS NOT NULL THEN
            INSERT INTO employees (name) VALUES (p_name);
        END IF;
    END;
    

Ejercicio Práctico

Ejercicio 1: Refactorizar Código

Refactoriza el siguiente código para que siga las mejores prácticas discutidas:

DECLARE
    v1 NUMBER;
    v2 NUMBER;
BEGIN
    v1 := 10;
    v2 := 20;
    IF v1 > v2 THEN
        DBMS_OUTPUT.PUT_LINE('v1 is greater');
    ELSE
        DBMS_OUTPUT.PUT_LINE('v2 is greater');
    END IF;
END;

Solución:

DECLARE
    v_first_number NUMBER := 10;
    v_second_number NUMBER := 20;
BEGIN
    -- Comparar los dos números
    IF v_first_number > v_second_number THEN
        DBMS_OUTPUT.PUT_LINE('v_first_number is greater');
    ELSE
        DBMS_OUTPUT.PUT_LINE('v_second_number is greater');
    END IF;
END;

Conclusión

En esta sección, hemos cubierto las mejores prácticas para escribir código PL/SQL claro, eficiente y seguro. Al seguir estas prácticas, no solo mejorarás la calidad de tu código, sino que también facilitarás su mantenimiento y optimización. En el próximo módulo, exploraremos técnicas avanzadas de depuración y ajuste de rendimiento en PL/SQL.

© Copyright 2024. Todos los derechos reservados