1. Introducció als procediments emmagatzemats
1.1. Què és un procediment emmagatzemat?
Un procediment emmagatzemat (PE) és una rutina (procediment o funció) formada per un conjunt d'ordres SQL que es guarda en el servidor, com un objecte més de la BD.
En MySQL funcionen a partir de la versió 5. Per a comprovar la versió:
| SQL | |
|---|---|
Des d'on es pot invocar un PE?
- De forma directa (per exemple: entorn textual de MySQL o des del Workbench)
- Des d'una aplicació que accedisca a la BD (per exemple: des d'un programa Java)
- Des d'un altre PE
Notes
- En la taula
mysql.prochi ha informació dels procediments creats: nom, propietari, base de dades on està, etc. - Si volem usar transaccions dins d'un PE, en compte d'iniciar-la amb
BEGINhaurem de fer-ho ambSTART TRANSACTION. Ara bé: només poden usar-se transaccions en procediments, no en funcions.
1.2. Avantatges i inconvenients
A la figura que es mostra, apareixen dues arquitectures de desenvolupament d'aplicacions possibles, una fa ús dels PE, i l'altra no:

1.2.1. Avantatges
- Millora el rendiment ja que no cal enviar tanta informació entre client i servidor. Es nota més eixa millora si client i servidor no estan en la mateixa màquina.
- El PE pot ser utilitzat per diferents aplicacions, independentment del llenguatge i la plataforma.
- Facilita la feina al programador: sap que existeix un PE que li proporciona un determinat servei, i no necessita saber les sentències SQL que incorpora el procediment ni els elements de l'esquema de la BD.
- Seguretat. Podem llevar permisos als usuaris sobre la BD i només donar permisos sobre els procediments. Així controlem de quina forma volem que siguen accedides les dades.
1.2.2. Inconvenients
-
Existeix una dependència amb el SGBD utilitzat. És a dir, cada sistema gestor de BD té el seu propi subllenguatge de PE:
SGBD Subllenguatge SQL per a PE MySQL SQL 2003 PostgreSQL PLPGSQL Oracle PL/SQL + Java DB2 (IBM) PL/SQL + Java Informix (IBM) SPL Per tant, si fem un PE amb un subllenguatge d'un SGBD i més endavant canviem de sistema gestor, haurem de tornar a refer els procediments.
-
No hi ha eines de depuració de procediments emmagatzemats.
- No està permès l'ús de l'ordre
USE nom_base_dadesdins d'un procediment per a canviar de BD. Ara bé: sí que es pot accedir a objectes d'altres BD amb el nom qualificat:nom_bd.nom_objecte.