Iniciar sesión

Crear un procedimiento almacenado

Rodrigo

Traducido por Rodrigo

Creado 2014-07-03 00:52:27 Modificado 2014-09-03 15:02:03

Un procedimiento almacenado es un programa (rutina) almacenado en la base de datos, hay muchos usos para los procedimientos almacenados, pueden ser usados para insertar datos, validar datos  y luego insertarlos, retirar datos retornando un resulset como una query, también se puede retornar data como un sql data type, o cualquier cosa que el lenguaje te permita hacer, puedes elegir entre retornar o no retornar data; esa es la principal diferencia con una función, la función sql debe retornar datos. También se les puede llamar procsprocStoPro,StoredProcsp or SP

En este tutorial vamos a desarrollar un procedimiento almacenado con un poco de lógica, el cual va a insertar datos en nuestra tabla añadiendo un poco de lógica para generar las contraseñas

este tutorial fue escrito usando el siguiente equipo:

  • Hardware:           laptop Thinkpad E430 Intel I5, 4gb Ram, 500gb HDD
  • SO:                     x86_64 GNU/Linux Ubuntu 14.10
  • Kernel:                3.13.0-29-generic
  • IDE/Text editor:   MySql workbench 6.0
  • BD:                      Mysql 5.5.31
  • Cliente MySql:       MySql workbench 6.0

 

1.- Creando la bd:

Primero necesitamos una base de datos para trabajar en el sp, tomemos el siguiente sciprt y ejecutémoslo en mysql

CREATE DATABASE tutorial;
USE tutorial;
 
CREATE TABLE users(
   id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
   name VARCHAR(45) NOT NULL,
   birthdate DATE NOT NULL,
   password VARCHAR(45) NOT NULL
);

2.-Creando el SP:

Como puedes ver, hemos creado una base de datos solo con una tabla, suficiente para trabajar en nuestro procedimiento almacenado, que necesita generar contraseñas

DELIMITER $$
CREATE PROCEDURE insert_user(pname VARCHAR(45), pbirthdate DATE)
BEGIN
  DECLARE gen_pass VARCHAR(45); /*variable declaration*/
  SET gen_pass=CONCAT(pname, SUBSTRING(pbirthdate, 1, 4)); /*adding some logic for passowrd*/
  INSERT INTO users(name, birthdate, password)VALUES(pname,pbirthdate,gen_pass); /*insert*/
END$$
DELIMITER ;

3.- Ejecutando el SP:

Hasta este punto, hemos terminado, ejecutemos el procedimiento almacenado y veamos como funciona

call insert_user('John','1984-06-30');

ahora veamos los datos

select*from users;

 

Descárgalo en https://docs.google.com/file/d/0BwOqSob-RrBOWk8zbWxCM0xXN0k/edit?pli=1

4.- Conclusión:

Con los procedimientos almacenados, podemos delegar el trabajo al servidor de base de datos sin usar el servidor de aplicaciones para hacer un poco de lógica, hay cosas buenas y malas sobre usar procedemientos almacenados

Ventajas:

  • Velocidad: Los procedimientos almacenados estan cacheados en el servidor
  • Pruebas: Pueden ser probados independientes de la aplicación
  • Mantención: Están almacenados en la base de datos, de esta manera sabes exactamente donde están en caso de que necesites modificarlos

Desventajas:

  • Portabilidad: Es una lastima, pero no puedes migrar procedimientos almacenados, si tienes un sp en SQL SERVER y quieres migrarlo a ORACLE DB debes escribirlo de nuevo usando la sintaxis PL/SQL 
  • Pruebas: Los errores sólo pueden ser detectados en tiempo de ejecución
  • Funciones limitadas: Usar lenguaje sql para manejar la aplicación siempre es menos poderoso que usar lenguajes de programación como php, java, ruby, C#, entre otros

5.- Links de referencias:




comments powered by Disqus