Introducció

En aquest tema, explorarem els procediments i funcions emmagatzemades en PostgreSQL. Aquestes eines són fonamentals per encapsular la lògica de negoci dins de la base de dades, permetent una major reutilització del codi i una millor organització de les operacions complexes.

Conceptes clau

Procediments emmagatzemats

  • Definició: Un procediment emmagatzemat és un conjunt de sentències SQL que es poden executar com una unitat. Els procediments poden acceptar paràmetres d'entrada i retornar valors.
  • Ús: S'utilitzen per realitzar operacions repetitives, com ara actualitzacions massives, càlculs complexos o tasques administratives.

Funcions emmagatzemades

  • Definició: Una funció emmagatzemada és similar a un procediment, però està dissenyada per retornar un valor. Les funcions poden ser invocades des de sentències SQL.
  • Ús: S'utilitzen per encapsular càlculs que es poden reutilitzar en diverses consultes, com ara càlculs financers o transformacions de dades.

Creant Procediments Emmagatzemats

Sintaxi bàsica

CREATE PROCEDURE nom_procediment (paràmetres)
LANGUAGE plpgsql
AS $$
BEGIN
    -- Codi del procediment
END;
$$;

Exemple pràctic

Crearem un procediment que actualitza el salari d'un empleat en funció del seu ID.

CREATE PROCEDURE update_salary(emp_id INT, new_salary NUMERIC)
LANGUAGE plpgsql
AS $$
BEGIN
    UPDATE employees
    SET salary = new_salary
    WHERE id = emp_id;
END;
$$;

Executant el procediment

CALL update_salary(1, 50000);

Creant Funcions Emmagatzemades

Sintaxi bàsica

CREATE FUNCTION nom_funció (paràmetres)
RETURNS tipus_de_retorn
LANGUAGE plpgsql
AS $$
BEGIN
    -- Codi de la funció
    RETURN valor;
END;
$$;

Exemple pràctic

Crearem una funció que calcula el salari anual d'un empleat en funció del seu salari mensual.

CREATE FUNCTION annual_salary(monthly_salary NUMERIC)
RETURNS NUMERIC
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN monthly_salary * 12;
END;
$$;

Utilitzant la funció

SELECT annual_salary(4000);

Exercicis pràctics

Exercici 1: Crear un procediment per eliminar un empleat

Descripció: Crea un procediment emmagatzemat que elimini un empleat de la taula employees en funció del seu ID.

Solució:

CREATE PROCEDURE delete_employee(emp_id INT)
LANGUAGE plpgsql
AS $$
BEGIN
    DELETE FROM employees
    WHERE id = emp_id;
END;
$$;

Exercici 2: Crear una funció per calcular el descompte

Descripció: Crea una funció que calculi el preu final d'un producte després d'aplicar un descompte. La funció ha de rebre el preu original i el percentatge de descompte.

Solució:

CREATE FUNCTION calculate_discount(price NUMERIC, discount_percent NUMERIC)
RETURNS NUMERIC
LANGUAGE plpgsql
AS $$
BEGIN
    RETURN price - (price * discount_percent / 100);
END;
$$;

Executant la funció

SELECT calculate_discount(100, 10); -- Retorna 90

Errors comuns i consells

  • Error de sintaxi: Assegura't de tancar correctament les sentències SQL amb ; i utilitzar els delimitadors correctes ($$).
  • Tipus de dades incorrectes: Verifica que els tipus de dades dels paràmetres i els valors retornats siguin correctes.
  • Manca de permisos: Assegura't que l'usuari que executa el procediment o la funció tingui els permisos necessaris per accedir a les taules i modificar-les.

Conclusió

Els procediments i funcions emmagatzemades són eines poderoses per encapsular la lògica de negoci dins de la base de dades. Permeten una major reutilització del codi i una millor organització de les operacions complexes. En els següents temes, explorarem altres funcionalitats avançades de PostgreSQL que complementen l'ús de procediments i funcions emmagatzemades.

Curs de PostgreSQL

Mòdul 1: Introducció a PostgreSQL

Mòdul 2: Operacions bàsiques de SQL

Mòdul 3: Consultes SQL avançades

Mòdul 4: Disseny de bases de dades i normalització

Mòdul 5: Funcionalitats avançades de PostgreSQL

Mòdul 6: Optimització i millora del rendiment

Mòdul 7: Seguretat i gestió d'usuaris

Mòdul 8: Treballant amb JSON i funcionalitats NoSQL

Mòdul 9: Extensions i eines avançades

Mòdul 10: Estudis de cas i aplicacions del món real

© Copyright 2024. Tots els drets reservats