Salta el contingut

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
show variables like '%version%';

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.proc hi 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 BEGIN haurem de fer-ho amb START 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:

Arquitectures amb i sense procediments emmagatzemats

1.2.1. Avantatges

  1. 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.
  2. El PE pot ser utilitzat per diferents aplicacions, independentment del llenguatge i la plataforma.
  3. 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.
  4. 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

  1. 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.

  2. No hi ha eines de depuració de procediments emmagatzemats.

  3. No està permès l'ús de l'ordre USE nom_base_dades dins 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.