Procedimiento almacenado sin parametros de salida en MySQL 5


Ahhh recuerdo la primera vez que utilize MySQL en su versión 3 la use en un hosting gratis llamado lycos.com no tengo ni idea si aun existe, aun que en esos tiempos yo no disponia de la renta de servidores me ha servido mucho para comprender el manejo de PHP a fondo pero esos fueron los viejos tiempos, ahora que MySQL forma parte de Sun, se puso las pilas y en su versión 5 implementó muchas características que permitieron dejar un SGBD muy rápido y además muy bien preparado para implementar bases de datos realmente “grandes” (La verdad es que aun tengo mis dudas con lo de las bases de datos grandes) y mantenibles.

Teoria

¿qué es realmente un procedimiento almacenado? Es un programa que se almacena físicamente en una tabla dentro del sistema de bases de datos. Este programa esta hecho con un lenguaje propio de cada Gestor de BD y esta compilado, por lo que la velocidad de ejecución será muy rápida.

Principales Ventajas :

  • Seguridad: Cuando llamamos a un procedimiento almacenado, este deberá realizar todas las comprobaciones pertinentes de seguridad y seleccionará la información lo más precisamente posible, para enviar de vuelta la información justa y necesaria y que por la red corra el mínimo de información, consiguiendo así un aumento del rendimiento de la red considerable.
  • Rendimiento: el SGBD, en este caso MySQL, es capaz de trabajar más rápido con los datos que cualquier lenguaje del lado del servidor, y llevará a cabo las tareas con más eficiencia. Solo 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. Esto es muy importante, una vez leí que cada conexión con la BD puede tardar hasta medios segundo, imagínate en un ambiente de producción con muchas visitas como puede perjudicar esto a nuestra aplicación… Otra ventaja es la posibilidad de separar la carga del servidor, ya que si disponemos de un servidor de base de datos externo estaremos descargando al servidor web de la carga de procesamiento de los datos.
  • Reutilización: el procedimiento almacenado podrá ser invocado desde cualquier parte del programa, y no tendremos que volver a armar la consulta a la BD cada que vez que queramos obtener unos datos.

Desventajas:

  • El programa se guarda en la BD, por lo tanto si se corrompe y perdemos la información también perderemos nuestros procedimientos. Esto es fácilmente subsanable llevando a cabo una buena política de respaldos de la BD.

Por lo tanto es recomendable usar procedimientos almacenados siempre que se vaya a hacer una aplicación grande, ya que nos facilitará la tarea bastante y nuestra aplicación será más rápida.

Ejemplo:

Comenzaremos por las reglas de negocio.

Vamos a crear dos tablas en una almacenaremos las personas mayores de 18 años y en otra las personas menores(Detalles de diseño! despues prometo poner otros ejemplos mucho más decentes).

CREATE TABLE ninos(edad int, nombre varchar(50));
CREATE TABLE adultos(edad int, nombre varchar(50));

Imagínate que ahora queremos introducir personas en las tablas pero dependiendo de la edad queremos que seintroduzcan en una tabla u otra, si estamos usando PHP podríamos comprobar mediante código si la persona es mayor de edad. Lo haríamos así:

$nombre = $_POST["nombre"];
$edad = $_POST["edad"];
</code><code>
if($edad &lt; 18){
mysql_query("INSERT INTO ninios VALUES(".$edad.",'".$nombre."')");
}else{
mysql_query("INSERT INTO adultos VALUES(".$edad.",'".$nombre."')");
}

Si la consulta es corta como en este caso, esta forma es incluso más rápida que tener que crear un procedimiento almacenado, pero si tienes que hacer esto muchas veces a lo largo de tu aplicación es mucho mejor irnos por el lado del procedimiento almacenado:

Se crea el procedimiento almacenado:

delimiter //

CREATE procedure&nbsp; introducePersona(IN edad int,IN nombre varchar(50))
begin
IF edad < 18 then
INSERT INTO ninos VALUES(edad,nombre);
else
INSERT INTO adultos VALUES(edad,nombre);
end IF;
end;
//

el delimiter le dice a MySQL que a partir de ahroa hasta que no introduzcamos // no se acaba la sentencia, esto lo hacemos así por que en nuestro procedimiento almacenado tendremos que introducir el carcter “;” para las sentencias, y si pulamos enter MySQL pensará que ya hemos acabado la consulta y dará error.

Con create procedure empezamos la definición de procedimiento con nombre introducePersona. En un procedimiento almacenado existen parámetros de entrada y de salida, los de entrada (precedidos de “in”) son los que le pasamos para usar dentro del procedimiento y los de salida (precedidos de “out”) son variables que se establecerán a lo largo del procedimiento y una vez esta haya finalizado podremos usar ya que se quedaran en la sesión de MySQL.

Para hacer una llamada a nuestro procedimiento almacenado usaremos la sentencia call:

call introducePersona(25,”Carlos”);

Una vez tenemos ya nuestro procedimiento simplemente lo ejecutaremos desde PHP mediante una llamada como esta:

$nombre = $_POST['nombre'];
$edad = $_POST['edad'];

mysql_query("call introducePersona(". $edad .",'".$nombre."');");
Anuncios

Acerca de Francisco Castán

Creador, Diseñador, Investigador y Programador de Software Lenguajes Preferidos: C/C++, C#, Java, PHP, Python, PERL, Shell, JavaScript

Publicado el 27/12/2010 en MySQL, PHP y etiquetado en , . Guarda el enlace permanente. 2 comentarios.

  1. Gracias, muy explicito!!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: