comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Stored Procedures en MySQL

  • 3 Respuestas
  • 6625 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Devilboy

  • *
  • Underc0der
  • Mensajes: 328
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Mayo 27, 2011, 01:51:20 pm »
STORED PROCEDURES

Bueno en este tutorial intentaré explicar que es un Procedimiento Almacenado.

Definición.

Según la wiki:
Un procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) el cual es almacenado físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.
Usos típicos para procedimientos almacenados incluyen la validación de datos siendo integrados a la estructura de base de datos (los procedimientos almacenados utilizados para este propósito a menudo son llamados disparadores; triggers en inglés), o encapsular un proceso grande y complejo. El último ejemplo generalmente ejecutará más rápido como un procedimiento almacenado que de haber sido implementado como, por ejemplo, un programa corriendo en el sistema cliente y comunicándose con la base de datos mediante el envío de consultas SQL y recibiendo sus resultados.
Los procedimientos pueden ser ventajosos: Cuando una base de datos es manipulada desde muchos programas externos. Al incluir la lógica de la aplicación en la base de datos utilizando procedimientos almacenados, la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es reducida. Esto puede simplificar la creación y, particularmente, el mantenimiento de los programas involucrados.

Podemos ver un claro ejemplo de estos procedimientos cuando requerimos realizar una misma operación en un servidor dentro de algunas o todas las bases de datos y a la vez dentro de todas o algunas de las tablas de las bases de datos del mismo. Para ello podemos utilizar a los Procedimientos almacenados auto creables que es una forma de generar ciclos redundantes a través de los procedimientos almacenados.

En pocas palabras un stored procedure (SP) es un programa (script) con sentencias sql que se ejecuta en la base de datos.
Para que tengan otra idea de lo que es,  imaginemos una función o método en programación.

Creando nuestro primer Stored Procedure (SP)

Antes de otra cosa creemos una nueva base de datos para hacer nuestros ejercicios:

Código: [Seleccionar]
Create database sp;
Use sp;
CREATE TABLE alumnos (idAlumno INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(50), apellido VARCHAR(30));
CREATE TABLE profesores (idProfesor INT NOT NULL PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(50), apellido VARCHAR(30));
INSERT INTO alumnos VALUES('','pepe','pecas');
INSERT INTO alumnos VALUES('','juan','el toro');
INSERT INTO profesores VALUES('','juan','alejandro');
INSERT INTO profesores VALUES('','carlos','perez');

Lo que hicimos fue crear una base de datos llamada SP y creamos dos tablas llamas alumnos y profesores con solo 3 campos: id, nombre y apellido.
Además ingresamos 2 usuarios a la tabla alumnos y profesores.
Ahora creáremos nuestro primer SP:

Código: [Seleccionar]
DELIMITER//
CREATE PROCEDURE listar()
BEGIN
SELECT * FROM alumnos;
END//
DELIMITER;

Delimiter// nos sirve para cambiar la forma de terminación de nuestras sentencias SQL  de; por //
Esto nos sirve por si tenemos más de una sentencia SQL en nuestro SP
La siguiente línea sirve para crear y darle nombre a nuestro SP, en este caso el nuestro se llama listar y necesita llevar paréntesis ().
Con la palabra reservada BEGIN le indicamos donde inicia y con END donde termina nuestro SP.
Todas las sentencias SQL se deben de hacer dentro de este bloque y deben de ir finalizadas por;
En este caso solo mostramos todos los registros de la tabla alumnos.
La palabra END debe de finalizar con el delimitador que establecimos con anterioridad, aquí se puede usar el que queramos por ejemplo $$, etc.

Y en la última línea regresamos el delimitador de // por;
Ya tenemos creado nuestro primer SP, ahora para usarlo escribimos lo siguiente:

CALL nombre_del_sp();

En este caso quedaría así:

Código: [Seleccionar]
CALL listar();
Y nos mostrará todos los registros de la tabla alumnos.

USO DE PARAMETROS

Veamos otro ejemplo con el mismo SP pero pasándole parámetros.
Los parámetros sirven para hacer más flexible y útil a los SP.

Existen 3 tipos de parámetros:

IN: Que son los parámetros de entrada, sirven para ingresar información  (La palabra IN es por defecto, así que si la omitimos no pasa nada).
OUT:
Parámetros de salida, sirven para extraer información
INOUT: Muy obvio creo…

PARAMETROS IN (ENTRADA)

Código: [Seleccionar]
DELIMITER//
CREATE PROCEDURE listarNombre(nombreAlumno  varchar(20))
BEGIN
SELECT * FROM alumnos where nombre = nombreAlumno;
END//

Con esto pasamos un parámetro IN a nuestro SP,  donde nos va a seleccionar todos los registros de la tabla alumnos donde nombre sea igual al parámetro.
CALL listarNombre(‘pepe’);

PARAMETROS OUT (SALIDA)


Veamos un ejemplo para entenderlo mejor

Código: [Seleccionar]
DELIMITER $$

CREATE PROCEDURE salida(id INT,OUT nombreAlumno VARCHAR(20))
BEGIN
SELECT nombre FROM alumnos WHERE idAlumno = id INTO nombreAlumno ;
END$$
DELIMITER ;

Y para llamarlo usamos:

Código: [Seleccionar]
CALL salida(2,@nombre);
Bueno y si se dan cuenta no pasa nada, no muestra el registro, lo que pasa es que hace falta mostrarlo y para eso usamos lo siguiente:

Código: [Seleccionar]
SELECT @nombre;
Aquí lo que hicimos fue pasarle un parámetro de entrada (IN) y regresar el resultado a la variable nombreAlumno(OUT).
Esto es muy parecido a lo que hacemos al programar, cuando creamos una función o método y usamos la palabra reservada return para regresar el resultado o un valor.

PARAMETRO ENTRADA-SALIDA (INOUT)


Código: [Seleccionar]
DELIMITER $$
CREATE PROCEDURE entradaSalida(INOUT variable VARCHAR(20))
BEGIN
SELECT nombre FROM alumnos WHERE idAlumno = variable INTO variable;
END$$
DELIMITER ;


En este ejemplo solo usamos una variable para asignar un valor y extraer el resultado.
Ahora ¿cómo lo ejecutamos?

Código: [Seleccionar]
SET @nombre = 2;
CALL salida(@nombre);
SELECT @nombre;

VARIABLES EN SP

Así como cuando programamos usamos variables, pues en los SP también se usan.
Pongamos un ejemplo muy sencillo.

Código: [Seleccionar]
DELIMITER $$
CREATE PROCEDURE variable()
    BEGIN   
DECLARE id INT;
SET id = 1;
SELECT * FROM alumnos WHERE idAlumno = id;
    END$$
DELIMITER ;

Usando Declare asignamos el nombre y tipo de la variable y con set asignamos un valor a nuestra variable.
También es posible declarar e inicializar una variable de la siguiente forma:

Código: [Seleccionar]
DECLARE id INT DEFAULT 1;
Probamos nuestro SP hacienda un llamado a variable:

Código: [Seleccionar]
CALL variable();
Bueno con esto termino la primera parte.

Espero les guste y les sirva

Dejo un archivo por si lo quieren descargar

http://www.mediafire.com/?7am7yur420wo29s

salu2

Devilboy

« Última modificación: Octubre 25, 2013, 01:14:22 pm por Expermicid »

Veo Una Energia Que Con Deceo de Justicia... Veo Mas Alla de LAs Letras Escritas...
Veo Un Hacktivismo Puro... Nacido De lo Mas Profundo De un Corazon..
Con La Mirada Firme En Defender Mis Ideales...


Desconectado Snifer

  • *
  • Underc0der
  • Mensajes: 1439
  • Actividad:
    0%
  • Reputación 1
  • Snifer@L4b's
    • Ver Perfil
    • Snifer@L4bs
  • Twitter: sniferl4bs
« Respuesta #1 en: Mayo 27, 2011, 03:30:57 pm »
Muy bueno heee... yo ando mas en SQL y ahora tengo que aprender un poco deMysql con los procedimientos almacenados...

Felicidades.. luego lo leo completo
http://www.sniferl4bs.com


Llaman traidor a la persona que evito que caiga el foro, gente bruta!



Desconectado _katze_

  • *
  • Underc0der
  • Mensajes: 37
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #2 en: Diciembre 07, 2011, 10:09:35 pm »
Código: SQL
  1. SELECT * FROM [TABLA]
  2.  
esto no es lo peor pero si lo mas lento, imaginate con datos grandes, para eso ahy soluciones, eso es la mitad de tiempo mas lento,,,y eso es mucho, un abrazo igual esta bueno

Desconectado Xt3mP

  • *
  • Underc0der
  • Mensajes: 432
  • Actividad:
    0%
  • Reputación 0
  • Ellos me están buscando, pero yo los encontraré.
    • MSN Messenger - Xt3mP@h4x0rz.us
    • AOL Instant Messenger - Xt3mP@h4x0rz.us
    • Yahoo Instant Messenger - Xt3mP@h4x0rz.us
    • Ver Perfil
    • Xt3mP
« Respuesta #3 en: Diciembre 07, 2011, 10:28:03 pm »
Así es, una base de datos grande al utilizar SELECT * FROM Tabla estas haciendo petición a todo, es mejor utilizar algo como:

Código: [Seleccionar]
SELECT [campo1, campo2] FROM [tabla]

Saludos.
Cada vez que me das Karma me motivas

 

¿Te gustó el post? COMPARTILO!



Curso: Bases De Datos [¡Instalar y Administrar el Motor de Base de Datos MySQL!]

Iniciado por Mr.Kratos

Respuestas: 0
Vistas: 716
Último mensaje Julio 20, 2018, 04:55:30 pm
por Mr.Kratos
Expulsar todas las sesiones MySQL de un usuario en particular desde un script

Iniciado por graphixx

Respuestas: 0
Vistas: 1952
Último mensaje Marzo 21, 2016, 10:03:04 am
por graphixx
Gestores de Base de Datos. [Navicat & MySQL Front]

Iniciado por @ed33x

Respuestas: 6
Vistas: 4250
Último mensaje Agosto 31, 2013, 04:26:33 pm
por [L]ord [R]NA
Base de Datos MySQL (curso básico-intermedio)

Iniciado por graphixx

Respuestas: 1
Vistas: 2763
Último mensaje Abril 03, 2018, 07:12:17 pm
por crissk8
Curso Aprende MySQL sin dolor de Cabeza

Iniciado por Mr.Kratos

Respuestas: 1
Vistas: 939
Último mensaje Agosto 02, 2018, 05:22:59 am
por Esc0rp1on