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.
Curs de PL/SQL
Mòdul 1: Introducció a PL/SQL
Mòdul 2: Fonaments de PL/SQL
- Estructura del bloc PL/SQL
- Variables i tipus de dades
- Estructures de control
- Cursors
- Gestió d'excepcions