Procedimientos almacenados en MySQL

Un procedimiento almacenado es un programa que se guarda físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro. Este programa esta hecho con un lenguaje propio de cada Gestor de BD y esta compilado, por lo que la velocidad de ejecución es muy rápida.

Las principales ventajas son:
  • El S.G.B.D. es capaz de trabajar más rápido con los datos que cualquier programa externo, ya que posee acceso directo a los datos a manipular y sólo necesita enviar el resultado final al usuario.
  • Sólo realizamos una conexión al servidor y este ya es capaz de realizar todas las comprobaciones sin tener que volver a establecer una conexión.
  • Podemos reutilizar el procedimiento y este puede ser llamado desde diferentes aplicaciones y lenguajes. Sólo lo programaremos una vez.
La desventaja principal es que se guarda en la B.D., por o que si se corrompe podemos perder los procedimientos. La solución como siempre en las BB.DD. es tener una buena política de copias de seguridad.

Bueno dejemos la teoría y vayamos a la práctica este es el ejemplo de un procedimiento almacenado:
> DELIMITER //
> CREATE PROCEDURE addAutomovil(
IN nombre VARCHAR(50),IN plazas INT)
> BEGIN
>  IF plazas < 6 THEN
>    INSERT INTO coche VALUES(nombre,plazas);
>  ELSE
>    INSERT INTO monovolumen VALUES(nombre,plazas);
>  END IF;
> END;
> //

Este procedimiento almacenado recibe los parámatros de nombre y número de plazas y en función de las plazas del vehículo inserta los datos en la tabla coche o monovolumen. Es una función bien tonta, lo sé, incluso podría ser más lenta como procedimiento almacenado que como código en nuestro programa. Pero es simplemente un ejemplo.

Para hacer una llamada al procedimiento almacenado basta con usar la sentencia call:
> CALL addAutomovil("Nissan Serena",8);
De ahora en adelante, usaremos siempre este procedimiento para introducir automóviles en la B.D. de forma que si un día se debe modificar sólo deberemos corregir el procedimiento.

1 comentario:


  1. select c.car_detalle carrera,
    count (rp.est_codigo)"numero de estudiantes"
    from carrera c, estudiantes e, regi_pasa rp
    where (c.car_codigo=e.car_codigo and e.est_codigo=rp.est_codigo)
    group by c.car_detalle

    select c.car_detalle carrera,
    count (rp.est_codigo)"numero de estudiantes"
    from carrera c, estudiantes e, regi_pasa rp
    where (c.car_codigo=e.car_codigo and e.est_codigo=rp.est_codigo)
    group by c.car_detalle

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.