Els procediments emmagatzemats són un component fonamental de PL/SQL que permet encapsular lògica de negoci en blocs de codi reutilitzables. Aquests procediments es poden invocar des de qualsevol lloc de l'aplicació, millorant la modularitat i la mantenibilitat del codi.

Què és un procediment emmagatzemat?

Un procediment emmagatzemat és un conjunt de sentències SQL i PL/SQL que es compilen i s'emmagatzemen a la base de dades. Un cop creat, es pot executar repetidament sense necessitat de recompilar-lo.

Avantatges dels procediments emmagatzemats:

  • Reutilització del codi: Permet encapsular la lògica de negoci en un sol lloc.
  • Millora del rendiment: Els procediments es compilen una vegada i es poden executar múltiples vegades.
  • Seguretat: Permet controlar l'accés a les dades mitjançant permisos.
  • Mantenibilitat: Facilita la gestió i actualització del codi.

Sintaxi bàsica d'un procediment emmagatzemat

La sintaxi per crear un procediment emmagatzemat és la següent:

CREATE OR REPLACE PROCEDURE nom_procediment (
    paràmetre1 IN tipus,
    paràmetre2 OUT tipus,
    paràmetre3 IN OUT tipus
) IS
BEGIN
    -- Cos del procediment
    NULL; -- Placeholder per a codi
END nom_procediment;
/

Explicació dels components:

  • CREATE OR REPLACE PROCEDURE: Inicia la definició del procediment. OR REPLACE permet actualitzar un procediment existent.
  • nom_procediment: Nom del procediment.
  • paràmetre1, paràmetre2, paràmetre3: Paràmetres d'entrada (IN), sortida (OUT) o entrada/sortida (IN OUT).
  • IS: Indica l'inici de la definició del procediment.
  • BEGIN...END: Bloc que conté el cos del procediment.
  • NULL;: Placeholder per a codi, es pot substituir per les sentències necessàries.

Exemple pràctic

A continuació, es mostra un exemple de procediment emmagatzemat que calcula el salari anual d'un empleat basat en el seu salari mensual.

Creació del procediment

CREATE OR REPLACE PROCEDURE calcular_salari_anual (
    p_empleat_id IN NUMBER,
    p_salari_anual OUT NUMBER
) IS
    v_salari_mensual NUMBER;
BEGIN
    -- Obtenir el salari mensual de l'empleat
    SELECT salari INTO v_salari_mensual
    FROM empleats
    WHERE empleat_id = p_empleat_id;

    -- Calcular el salari anual
    p_salari_anual := v_salari_mensual * 12;
END calcular_salari_anual;
/

Explicació del codi:

  • p_empleat_id: Paràmetre d'entrada que identifica l'empleat.
  • p_salari_anual: Paràmetre de sortida que contindrà el salari anual calculat.
  • v_salari_mensual: Variable local per emmagatzemar el salari mensual de l'empleat.
  • SELECT salari INTO v_salari_mensual: Obté el salari mensual de la taula empleats.
  • p_salari_anual := v_salari_mensual * 12;: Calcula el salari anual multiplicant el salari mensual per 12.

Execució del procediment

Per executar el procediment, es pot utilitzar el següent bloc PL/SQL:

DECLARE
    v_salari_anual NUMBER;
BEGIN
    calcular_salari_anual(101, v_salari_anual);
    DBMS_OUTPUT.PUT_LINE('El salari anual és: ' || v_salari_anual);
END;
/

Explicació del codi:

  • DECLARE: Inicia la declaració de variables.
  • v_salari_anual: Variable per emmagatzemar el resultat del procediment.
  • calcular_salari_anual(101, v_salari_anual);: Crida al procediment amb l'ID de l'empleat 101.
  • DBMS_OUTPUT.PUT_LINE: Mostra el salari anual calculat.

Exercicis pràctics

Exercici 1: Crear un procediment per actualitzar el salari d'un empleat

Descripció: Crea un procediment emmagatzemat que actualitzi el salari d'un empleat basat en el seu ID i un percentatge d'increment.

Solució:

CREATE OR REPLACE PROCEDURE actualitzar_salari (
    p_empleat_id IN NUMBER,
    p_percentatge IN NUMBER
) IS
BEGIN
    UPDATE empleats
    SET salari = salari + (salari * p_percentatge / 100)
    WHERE empleat_id = p_empleat_id;
END actualitzar_salari;
/

Exercici 2: Crear un procediment per eliminar un empleat

Descripció: Crea un procediment emmagatzemat que elimini un empleat de la taula empleats basat en el seu ID.

Solució:

CREATE OR REPLACE PROCEDURE eliminar_empleat (
    p_empleat_id IN NUMBER
) IS
BEGIN
    DELETE FROM empleats
    WHERE empleat_id = p_empleat_id;
END eliminar_empleat;
/

Errors comuns i consells

  • Oblidar el / al final del procediment: Assegura't d'incloure el / per indicar el final del bloc PL/SQL.
  • No gestionar excepcions: Sempre és una bona pràctica incloure la gestió d'excepcions per manejar errors inesperats.
  • No validar els paràmetres d'entrada: Verifica que els paràmetres d'entrada siguin vàlids abans de processar-los.

Conclusió

Els procediments emmagatzemats són una eina poderosa per encapsular la lògica de negoci i millorar la modularitat del codi. Amb la pràctica, es poden crear procediments eficients i segurs que simplifiquin la gestió de la base de dades i millorin el rendiment de les aplicacions. En el següent tema, explorarem les funcions en PL/SQL, que són similars als procediments però amb algunes diferències clau.

© Copyright 2024. Tots els drets reservats