En aquest tema, explorarem les millors pràctiques per escriure codi PL/SQL eficient, mantenible i segur. Seguir aquestes recomanacions t'ajudarà a evitar errors comuns i a millorar la qualitat del teu codi.

  1. Escriptura de codi clar i llegible

1.1. Utilitza noms descriptius

  • Variables: Utilitza noms de variables que descriguin clarament el seu propòsit.
  • Procediments i funcions: Els noms han de reflectir l'acció que realitzen.

Exemple:

-- Noms de variables clars
DECLARE
    v_total_sales NUMBER;
    v_employee_name VARCHAR2(50);
BEGIN
    -- Codi aquí
END;

1.2. Comentaris adequats

  • Comentaris en línia: Explica el propòsit de línies específiques de codi.
  • Comentaris de bloc: Proporciona una visió general de seccions més grans de codi.

Exemple:

DECLARE
    v_total_sales NUMBER;
BEGIN
    -- Calcula les vendes totals per a l'any actual
    SELECT SUM(sales_amount) INTO v_total_sales
    FROM sales
    WHERE sales_date BETWEEN TO_DATE('01-JAN-2023', 'DD-MON-YYYY') AND TO_DATE('31-DEC-2023', 'DD-MON-YYYY');
    
    -- Mostra el resultat
    DBMS_OUTPUT.PUT_LINE('Total Sales: ' || v_total_sales);
END;

  1. Estructura i organització del codi

2.1. Utilitza blocs anidats amb cura

  • Evita l'ús excessiu de blocs anidats per mantenir el codi llegible.

Exemple:

BEGIN
    DECLARE
        v_total_sales NUMBER;
    BEGIN
        -- Codi aquí
    END;
END;

2.2. Divideix el codi en procediments i funcions

  • Encapsula la lògica en procediments i funcions per a una millor reutilització i mantenibilitat.

Exemple:

CREATE OR REPLACE PROCEDURE calculate_total_sales IS
    v_total_sales NUMBER;
BEGIN
    SELECT SUM(sales_amount) INTO v_total_sales
    FROM sales
    WHERE sales_date BETWEEN TO_DATE('01-JAN-2023', 'DD-MON-YYYY') AND TO_DATE('31-DEC-2023', 'DD-MON-YYYY');
    
    DBMS_OUTPUT.PUT_LINE('Total Sales: ' || v_total_sales);
END calculate_total_sales;

  1. Gestió d'errors

3.1. Utilitza blocs d'excepcions

  • Gestiona les excepcions per evitar que el programa falli inesperadament.

Exemple:

BEGIN
    -- Codi que pot generar una excepció
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('No data found.');
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('An unexpected error occurred: ' || SQLERRM);
END;

3.2. Registra els errors

  • Utilitza taules de registre o eines de registre per mantenir un historial d'errors.

Exemple:

CREATE OR REPLACE PROCEDURE log_error(p_error_message VARCHAR2) IS
BEGIN
    INSERT INTO error_log (error_message, log_date)
    VALUES (p_error_message, SYSDATE);
    COMMIT;
END log_error;

  1. Optimització del rendiment

4.1. Utilitza col·leccions i operacions en massa

  • Redueix el nombre de commutacions de context entre PL/SQL i SQL utilitzant col·leccions i operacions en massa.

Exemple:

DECLARE
    TYPE sales_table_type IS TABLE OF sales%ROWTYPE;
    v_sales_table sales_table_type;
BEGIN
    SELECT * BULK COLLECT INTO v_sales_table FROM sales;
    
    FORALL i IN v_sales_table.FIRST..v_sales_table.LAST
        INSERT INTO sales_archive VALUES v_sales_table(i);
END;

4.2. Evita les consultes innecessàries

  • Minimitza el nombre de consultes SQL dins de bucles PL/SQL.

Exemple:

DECLARE
    v_total_sales NUMBER;
BEGIN
    -- Consulta única fora del bucle
    SELECT SUM(sales_amount) INTO v_total_sales
    FROM sales
    WHERE sales_date BETWEEN TO_DATE('01-JAN-2023', 'DD-MON-YYYY') AND TO_DATE('31-DEC-2023', 'DD-MON-YYYY');
    
    FOR i IN 1..10 LOOP
        DBMS_OUTPUT.PUT_LINE('Total Sales: ' || v_total_sales);
    END LOOP;
END;

  1. Seguretat

5.1. Evita la injecció SQL

  • Utilitza variables d'enllaç per evitar la injecció SQL.

Exemple:

DECLARE
    v_employee_id NUMBER := 101;
    v_employee_name VARCHAR2(50);
BEGIN
    -- Utilitza una variable d'enllaç
    SELECT employee_name INTO v_employee_name
    FROM employees
    WHERE employee_id = v_employee_id;
    
    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
END;

5.2. Controla els permisos d'accés

  • Assegura't que només els usuaris autoritzats tinguin accés a procediments i funcions sensibles.

Exemple:

-- Concedeix permisos específics
GRANT EXECUTE ON calculate_total_sales TO sales_manager;

Conclusió

Seguir aquestes millors pràctiques t'ajudarà a escriure codi PL/SQL més eficient, segur i fàcil de mantenir. Recorda que la claredat i la seguretat són tan importants com el rendiment. Amb aquestes tècniques, estaràs millor preparat per afrontar projectes complexos i garantir la qualitat del teu codi.

© Copyright 2024. Tots els drets reservats