SlideShare una empresa de Scribd logo
1 de 25
Capa datos – Procedimientos
almacenados
MySql
Jesús Alejandro Flores Hernández
Introducción
Descripción. Presentación que muestra el uso de los procedimientos
almacenados y parámetros en MySql para programar la capa de datos.
Objetivo. Construir una capa de datos utilizando procedimientos
almacenados en MySql.
Requerimientos
 Tener instalado MySql y HeidiSql (ver:
http://es.slideshare.net/ltidesdaci/instalaciondmysqlwamp-y-heidisql)
 Tener la Base de datos ProvPar en MySql con las tablas: proveedores,
partes y pedidos(se describen a continuación)
Base de datos provPar
1. Agregue una base de datos llamada
provPar en MySql
2. Agregue una tabla llamada partes a
la base de datos provPar con los
campos
3. Agregue a la tabla partes los datos
Procedimiento almacenados (SP)
Un SP es un conjunto de instrucciones en SQL que permiten procesar los datos
de un base de datos, nos permiten un mejor control de la información sobre
todo cuando se tiene múltiples aplicaciones para una base de datos, como
una referencia a los SP vea:
http://dev.mysql.com/doc/refman/5.0/es/stored-procedure-syntax.html

http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html
http://es.slideshare.net/ltidesdaci/procedimientosalmacenados
http://fcocastan.wordpress.com/2010/12/29/procedimiento-almacenado-yestructuras-de-control-en-mysql-while-if-then-else-switch/
Procedimiento almacenado (SP) para insertar datos
CREATE DEFINER=`root`@`localhost` PROCEDURE `spAltaParte`(IN `miID` VARCHAR(10), IN `miDescripcion` VARCHAR(50), IN
`miPeso` INT, IN `miColor` VARCHAR(10), IN `miCU` DOUBLE, IN `miExistencia` INT, OUT `miSalida` VARCHAR(50))
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
if not EXISTS( select (1) from partes where partes.id=miID) THEN
#insertarlo
insert into partes values(miID,miDescripcion,miPeso,miColor,miCU,miExistencia);

set miSalida='inserción correcta';
else
set miSalida='Clave existente';
end if;
END

NOTA
Este es el código del procedimiento almacenado para dar de alta una
parte, sin embargo es mas fácil crearlo desde Heidi (ver
http://es.slideshare.net/ltidesdaci/procedimientosalmacenados), en las
diapositivas siguientes se asume que creará el SP usando Heidi y en ellas se
indica como hacerlo.
Crear el procedimiento almacenado
Para un ejemplo de como crear el SP en Heidi vea(http://es.slideshare.net/ltidesdaci/procedimientosalmacenados)

1 Cree un procedimiento llamado spAltaParte
2 En la pestaña parámetros; Agregue los parámetros que se muestran con los tipos que se muestran (note que 6 son IN y el séptimo es OUT):
Codificar el procedimiento almacenado
3 Agregue donde muestra la línea roja el código del recuadro azul:
if not EXISTS( select id from partes where partes.id=miID) THEN

#insertarlo

insert into partes values(miID,miDescripcion,miPeso,miColor,miCU,miExistencia);
set miSalida='inserción correcta';
else
set miSalida='Clave existente';
end if;
Explicación parámetros
El SP tiene 7 parámetros 6 de entrada (IN):
miID
miDesxcripcion
miPeso

miColor
miCU
miExistencia
Y uno de salida (OUT)

miSalida
Llamado
La forma de llamar al SP desde MySql es: En una ventana de consulta de Heidi tecle:
call spAltaParte('09','tee cobre',60,'natural',85,20,@miSalida);
select @miSalida

Donde los parámetros de entrada (los primeros 6) corresponden a los datos que se
desean insertar y el parámetro de salida (se declara con @ en MySql por que es una
variable) recibirá una respuesta del SP.
En este llamado se esta tratando de insertar una parte con los datos que se dan en
los primero 6 parámetros y a continuación se muestra el contenido del parámetro de
salida devuelto por el SP.
Explicación del código
La sentencia:

select id from partes where partes.id=‘miID' ;
Muestra el campo id de la tabla parte donde el id sea igual al parámetro miID,
básicamente busca un registro cuyo valor en su campo id sea el de nuestro
parámetro. Es decir revisa si esta clave ya existe.
La sentencia:
if not EXISTS( select id from partes where partes.id=miID) THEN

Pregunta ¿si el registro buscado no existe entonces?
Explicación
Pues entonces se inserta la parte y se almacena un letrero en el parámetro de salida miSalida:
insert into partes values(miID,miDescripcion,miPeso,miColor,miCU,miExistencia);
set miSalida='inserción correcta';
En caso contrario quiere decir que la parte ya existe y no se inserta por que no debe
duplicarse y solo se pone en el parámetro de salida el letrero:
else
set miSalida='Clave existente';
Llamado – En una ventana de consulta tecle y ejecute

call spAltaParte('09','tee cobre',60,'natural',85,20,@miSalida);
select @miSalida

Verá el resultado en la ventana de resultados de HeidiSql
SP usos
En un SP podemos realizar comprobaciones de datos antes de insertarlos, por ejemplo suponga
que deseamos asegurarnos de que el valor en el campo existencia no sea negativo y también
queremos que la descripción de la parte este en mayúsculas sin importar como la tecleo el
usuario.

El código en nuestro spAltaParte sería:
BEGIN
if not EXISTS( select id from partes where partes.id=miID) THEN
#convertir descripción a amysuculas
set miDescripcion=UPPER(miDescripcion);
#verificar que existencia no sea negativo
if miExistencia<0 then
set miExistencia=0;
end if;
#insertar dato
insert into partes values(miID,miDescripcion,miPeso,miColor,miCU,miExistencia);
set miSalida='inserción correcta';
else
set miSalida='Clave existente';
end if;
END
SP para consulta de datos
A continuación crearemos un SP para consulta de datos
Agregue la tabla proveedores a la base de datos ProvPar

Agregue los datos
Agregue la tabla pedidos
Agregue a la base de datos provPar la tabla pedidos con los campos:

Inserte en la tabla pedidos los datos:
Cree un SP llamado spPedidos con un
parámetro de entrada llamado opcion (sin acento) y
el código:
)

Pruebe el SP
Pruebe el sp con las sentencia (una sentencia por cada consulta):
call spPedidos(1)
call spPedidos(2)

call spPedidos(3)
call spPedidos(4)
Explicación
Es Sp recibe el parámetro opocion (no debe llevar acento) en el llamado. Y según sea 1,2 3 o
4 ejecuta una cosnsulta, en el código del SP la sentencia:
case opcion
when 1 then
#todos
when 2 then
#nombre proveedor nombre partes fecha y cantidad
when 3 then
#los que ya se surtieron
when 4 then
#los que no se han surtido
end case;
Permite ejecutar una consulta en dependencia del contenido del parámetro
Por ejemplo cuando el parámetro tiene el valor 1

when 1 then
#todos
select * from pedidos;

Recupera los datos de todos los
pedidos
Por ejemplo cuando el parámetro tiene el valor 2

when 2 then
#nombre proveedor nombre partes fecha y cantidad
select proveedores.nombre as 'Proveedor', partes.descripcion, pedidos.fecha, pedidos.cantidad
from pedidos inner join partes on pedidos.idparte=partes.id inner join proveedores on
pedidos.idproveedor=proveedores.id;

Recupera los datos de todos los pedidos con nombre de
proveedor y descripción de la parte
Cuando el parámetro tiene valor…
Con valor 3 devuelve los que ya se surtieron
Con valor 4 los que no se han surtido.
Actividad
A partir del ejemplo, agregue el código necesario para dar de alta pedidos y
proveedores. También las siguiente consultas:
1. Todas las partes pedidas a un proveedor dado.
2. Todos los pedidos que aun no entrega un proveedor dado.
3. El total de una parte dada pedidas a un proveedor dado.
La palabra dado se refiere a un dato que dará el usuario y debemos enviarlo
como parámetro al SP.
Fin
http://dev.mysql.com/doc/refman/5.0/es/stored-procedure-syntax.html
http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html
http://es.slideshare.net/ltidesdaci/procedimientosalmacenados
http://fcocastan.wordpress.com/2010/12/29/procedimiento-almacenado-yestructuras-de-control-en-mysql-while-if-then-else-switch/
http://es.slideshare.net/ltidesdaci/instalaciondmysqlwamp-y-heidisql

Más contenido relacionado

La actualidad más candente

Teoria procedimientos almacenados
Teoria procedimientos almacenadosTeoria procedimientos almacenados
Teoria procedimientos almacenados
hirmaroxana13
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
bat1820
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
testgrupocomex
 
Disparadores
DisparadoresDisparadores
Disparadores
Ziscko
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
Luis Jherry
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadores
Pablo Jose
 

La actualidad más candente (19)

Teoria procedimientos almacenados
Teoria procedimientos almacenadosTeoria procedimientos almacenados
Teoria procedimientos almacenados
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
Categorias de Procedimientos Almacenados
Categorias de Procedimientos AlmacenadosCategorias de Procedimientos Almacenados
Categorias de Procedimientos Almacenados
 
PROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOSPROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOS
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Procesamientos Almacenados
Procesamientos AlmacenadosProcesamientos Almacenados
Procesamientos Almacenados
 
Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)
Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)
Base de Datos(Funciones, Vistas,Procedimientos Almacenados,Triggers)
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Ejemplo de Trigger en Mysql
Ejemplo de Trigger en MysqlEjemplo de Trigger en Mysql
Ejemplo de Trigger en Mysql
 
Capa negocio con clases en VB
Capa negocio con clases en VBCapa negocio con clases en VB
Capa negocio con clases en VB
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Sesion10 - Funciones y procedimientos (Oracle)
Sesion10 - Funciones y procedimientos (Oracle)Sesion10 - Funciones y procedimientos (Oracle)
Sesion10 - Funciones y procedimientos (Oracle)
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Ayuda la clase statement
Ayuda la clase statementAyuda la clase statement
Ayuda la clase statement
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadores
 
Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Triggers o disparadores en MySQL
Triggers o disparadores en MySQL
 

Similar a Capa_datos_Con_procedimientos_almacenados

7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server
Corfapo
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
guesta403644
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
Rafa
 

Similar a Capa_datos_Con_procedimientos_almacenados (20)

7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server
 
SESION 05.pdf
SESION 05.pdfSESION 05.pdf
SESION 05.pdf
 
preparedstatement
preparedstatementpreparedstatement
preparedstatement
 
Guia 12 js
Guia 12 jsGuia 12 js
Guia 12 js
 
Tarea
TareaTarea
Tarea
 
Tutorial bd y php
Tutorial bd y phpTutorial bd y php
Tutorial bd y php
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
Oracle Y C#
Oracle Y C#Oracle Y C#
Oracle Y C#
 
Commit&rollback
Commit&rollbackCommit&rollback
Commit&rollback
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Laboratorio de Programacion
Laboratorio de ProgramacionLaboratorio de Programacion
Laboratorio de Programacion
 
C# Nuevas características en C# 6
C# Nuevas características en C# 6C# Nuevas características en C# 6
C# Nuevas características en C# 6
 
PREPAREDSTATEMENT
PREPAREDSTATEMENTPREPAREDSTATEMENT
PREPAREDSTATEMENT
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Laboratorio de XML en DB2
Laboratorio de XML en DB2Laboratorio de XML en DB2
Laboratorio de XML en DB2
 
Pa
PaPa
Pa
 
PHP - MYSQL
PHP - MYSQLPHP - MYSQL
PHP - MYSQL
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
 
Conexion Entre Php Y Mysqul
Conexion Entre Php Y MysqulConexion Entre Php Y Mysqul
Conexion Entre Php Y Mysqul
 

Más de UNACAR (6)

Configurar programes notepad para Compilar Visual Basic
Configurar programes notepad para Compilar Visual BasicConfigurar programes notepad para Compilar Visual Basic
Configurar programes notepad para Compilar Visual Basic
 
Consultas sql
Consultas sqlConsultas sql
Consultas sql
 
InstalarDriver_NET_paramysql
InstalarDriver_NET_paramysqlInstalarDriver_NET_paramysql
InstalarDriver_NET_paramysql
 
Instalacion_d_MySqlWamp_y_Heidi-Sql
Instalacion_d_MySqlWamp_y_Heidi-SqlInstalacion_d_MySqlWamp_y_Heidi-Sql
Instalacion_d_MySqlWamp_y_Heidi-Sql
 
Simbolos_Uml
Simbolos_UmlSimbolos_Uml
Simbolos_Uml
 
Portafolio de trabajo flores
Portafolio de trabajo floresPortafolio de trabajo flores
Portafolio de trabajo flores
 

Capa_datos_Con_procedimientos_almacenados

  • 1. Capa datos – Procedimientos almacenados MySql Jesús Alejandro Flores Hernández
  • 2. Introducción Descripción. Presentación que muestra el uso de los procedimientos almacenados y parámetros en MySql para programar la capa de datos. Objetivo. Construir una capa de datos utilizando procedimientos almacenados en MySql.
  • 3. Requerimientos  Tener instalado MySql y HeidiSql (ver: http://es.slideshare.net/ltidesdaci/instalaciondmysqlwamp-y-heidisql)  Tener la Base de datos ProvPar en MySql con las tablas: proveedores, partes y pedidos(se describen a continuación)
  • 4. Base de datos provPar 1. Agregue una base de datos llamada provPar en MySql 2. Agregue una tabla llamada partes a la base de datos provPar con los campos 3. Agregue a la tabla partes los datos
  • 5. Procedimiento almacenados (SP) Un SP es un conjunto de instrucciones en SQL que permiten procesar los datos de un base de datos, nos permiten un mejor control de la información sobre todo cuando se tiene múltiples aplicaciones para una base de datos, como una referencia a los SP vea: http://dev.mysql.com/doc/refman/5.0/es/stored-procedure-syntax.html http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html http://es.slideshare.net/ltidesdaci/procedimientosalmacenados http://fcocastan.wordpress.com/2010/12/29/procedimiento-almacenado-yestructuras-de-control-en-mysql-while-if-then-else-switch/
  • 6. Procedimiento almacenado (SP) para insertar datos CREATE DEFINER=`root`@`localhost` PROCEDURE `spAltaParte`(IN `miID` VARCHAR(10), IN `miDescripcion` VARCHAR(50), IN `miPeso` INT, IN `miColor` VARCHAR(10), IN `miCU` DOUBLE, IN `miExistencia` INT, OUT `miSalida` VARCHAR(50)) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN if not EXISTS( select (1) from partes where partes.id=miID) THEN #insertarlo insert into partes values(miID,miDescripcion,miPeso,miColor,miCU,miExistencia); set miSalida='inserción correcta'; else set miSalida='Clave existente'; end if; END NOTA Este es el código del procedimiento almacenado para dar de alta una parte, sin embargo es mas fácil crearlo desde Heidi (ver http://es.slideshare.net/ltidesdaci/procedimientosalmacenados), en las diapositivas siguientes se asume que creará el SP usando Heidi y en ellas se indica como hacerlo.
  • 7. Crear el procedimiento almacenado Para un ejemplo de como crear el SP en Heidi vea(http://es.slideshare.net/ltidesdaci/procedimientosalmacenados) 1 Cree un procedimiento llamado spAltaParte 2 En la pestaña parámetros; Agregue los parámetros que se muestran con los tipos que se muestran (note que 6 son IN y el séptimo es OUT):
  • 8. Codificar el procedimiento almacenado 3 Agregue donde muestra la línea roja el código del recuadro azul: if not EXISTS( select id from partes where partes.id=miID) THEN #insertarlo insert into partes values(miID,miDescripcion,miPeso,miColor,miCU,miExistencia); set miSalida='inserción correcta'; else set miSalida='Clave existente'; end if;
  • 9. Explicación parámetros El SP tiene 7 parámetros 6 de entrada (IN): miID miDesxcripcion miPeso miColor miCU miExistencia Y uno de salida (OUT) miSalida
  • 10. Llamado La forma de llamar al SP desde MySql es: En una ventana de consulta de Heidi tecle: call spAltaParte('09','tee cobre',60,'natural',85,20,@miSalida); select @miSalida Donde los parámetros de entrada (los primeros 6) corresponden a los datos que se desean insertar y el parámetro de salida (se declara con @ en MySql por que es una variable) recibirá una respuesta del SP. En este llamado se esta tratando de insertar una parte con los datos que se dan en los primero 6 parámetros y a continuación se muestra el contenido del parámetro de salida devuelto por el SP.
  • 11. Explicación del código La sentencia: select id from partes where partes.id=‘miID' ; Muestra el campo id de la tabla parte donde el id sea igual al parámetro miID, básicamente busca un registro cuyo valor en su campo id sea el de nuestro parámetro. Es decir revisa si esta clave ya existe. La sentencia: if not EXISTS( select id from partes where partes.id=miID) THEN Pregunta ¿si el registro buscado no existe entonces?
  • 12. Explicación Pues entonces se inserta la parte y se almacena un letrero en el parámetro de salida miSalida: insert into partes values(miID,miDescripcion,miPeso,miColor,miCU,miExistencia); set miSalida='inserción correcta'; En caso contrario quiere decir que la parte ya existe y no se inserta por que no debe duplicarse y solo se pone en el parámetro de salida el letrero: else set miSalida='Clave existente';
  • 13. Llamado – En una ventana de consulta tecle y ejecute call spAltaParte('09','tee cobre',60,'natural',85,20,@miSalida); select @miSalida Verá el resultado en la ventana de resultados de HeidiSql
  • 14. SP usos En un SP podemos realizar comprobaciones de datos antes de insertarlos, por ejemplo suponga que deseamos asegurarnos de que el valor en el campo existencia no sea negativo y también queremos que la descripción de la parte este en mayúsculas sin importar como la tecleo el usuario. El código en nuestro spAltaParte sería: BEGIN if not EXISTS( select id from partes where partes.id=miID) THEN #convertir descripción a amysuculas set miDescripcion=UPPER(miDescripcion); #verificar que existencia no sea negativo if miExistencia<0 then set miExistencia=0; end if; #insertar dato insert into partes values(miID,miDescripcion,miPeso,miColor,miCU,miExistencia); set miSalida='inserción correcta'; else set miSalida='Clave existente'; end if; END
  • 15. SP para consulta de datos A continuación crearemos un SP para consulta de datos
  • 16. Agregue la tabla proveedores a la base de datos ProvPar Agregue los datos
  • 17. Agregue la tabla pedidos Agregue a la base de datos provPar la tabla pedidos con los campos: Inserte en la tabla pedidos los datos:
  • 18. Cree un SP llamado spPedidos con un parámetro de entrada llamado opcion (sin acento) y el código:
  • 19. ) Pruebe el SP Pruebe el sp con las sentencia (una sentencia por cada consulta): call spPedidos(1) call spPedidos(2) call spPedidos(3) call spPedidos(4)
  • 20. Explicación Es Sp recibe el parámetro opocion (no debe llevar acento) en el llamado. Y según sea 1,2 3 o 4 ejecuta una cosnsulta, en el código del SP la sentencia: case opcion when 1 then #todos when 2 then #nombre proveedor nombre partes fecha y cantidad when 3 then #los que ya se surtieron when 4 then #los que no se han surtido end case; Permite ejecutar una consulta en dependencia del contenido del parámetro
  • 21. Por ejemplo cuando el parámetro tiene el valor 1 when 1 then #todos select * from pedidos; Recupera los datos de todos los pedidos
  • 22. Por ejemplo cuando el parámetro tiene el valor 2 when 2 then #nombre proveedor nombre partes fecha y cantidad select proveedores.nombre as 'Proveedor', partes.descripcion, pedidos.fecha, pedidos.cantidad from pedidos inner join partes on pedidos.idparte=partes.id inner join proveedores on pedidos.idproveedor=proveedores.id; Recupera los datos de todos los pedidos con nombre de proveedor y descripción de la parte
  • 23. Cuando el parámetro tiene valor… Con valor 3 devuelve los que ya se surtieron Con valor 4 los que no se han surtido.
  • 24. Actividad A partir del ejemplo, agregue el código necesario para dar de alta pedidos y proveedores. También las siguiente consultas: 1. Todas las partes pedidas a un proveedor dado. 2. Todos los pedidos que aun no entrega un proveedor dado. 3. El total de una parte dada pedidas a un proveedor dado. La palabra dado se refiere a un dato que dará el usuario y debemos enviarlo como parámetro al SP.