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.
- 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;
- 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;
- 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);
- 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;
- 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.
Curso de PL/SQL
Módulo 1: Introducción a PL/SQL
Módulo 2: Fundamentos de PL/SQL
- Estructura del Bloque PL/SQL
- Variables y Tipos de Datos
- Estructuras de Control
- Cursores
- Manejo de Excepciones