Está en la página 1de 4

Procedimientos almacenados

Los procedimientos almacenados ofrecen la posibilidad de volver a utilizar el código común,


ofrecen soporte para personalizar las aplicaciones de bases de datos y mejorar la productividad al
desarrollar este tipo de aplicaciones.

Un procedimiento almacenado es un conjunto de comandos SQL que pueden almacenarse en el


servidor. Una vez que se hace, los clientes no necesitan relanzar los comandos individuales pero
pueden en su lugar referirse al procedimiento almacenado.

Algunas situaciones en que los procedimientos almacenados pueden ser particularmente útiles:

 Cuando múltiples aplicaciones cliente se escriben en distintos lenguajes o funcionan en


distintas plataformas, pero necesitan realizar la misma operación en la base de datos.
 Cuando la seguridad es muy importante. Los bancos, por ejemplo, usan procedimientos
almacenados para todas las operaciones comunes. Esto proporciona un entorno seguro y
consistente, y los procedimientos pueden asegurar que cada operación se loguea
apropiadamente. En tal entorno, las aplicaciones y los usuarios no obtendrían ningún
acceso directo a las tablas de la base de datos, sólo pueden ejecutar algunos
procedimientos almacenados.

Los procedimientos almacenados pueden mejorar el rendimiento ya que se necesita enviar menos
información entre el servidor y el cliente. El intercambio que hay es que aumenta la carga del
servidor de la base de datos ya que la mayoría del trabajo se realiza en la parte del servidor y no
en el cliente. Considere esto si muchas máquinas cliente (como servidores Web) se sirven a sólo
uno o pocos servidores de bases de datos.

Los procedimientos almacenados permiten tener bibliotecas o funciones en el servidor de base de


datos. Esta característica es compartida por los lenguajes de programación modernos que
permiten este diseño interno, por ejemplo, usando clases. Usando estas características del
lenguaje de programación cliente es beneficioso para el programador incluso fuera del entorno de
la base de datos.

Sintaxis
Los procedimientos almacenados se crean con el comando CREATE PROCEDURE. Un
procedimiento se invoca usando un comando CALL, y sólo puede pasar valores usando variables
de salida.

La sintaxis de un procedimiento almacenado es la siguiente:

CREATE PROCEDURE nombre_procedimiento


BEGIN
Sentencias_SQL
END
Parámetros
Los parámetros se definen separados por coma. Los parámetros de los procedimientos
almacenados de MySQL pueden ser de tres tipos:

 IN. Tipo de parámetro que se usa por defecto. La aplicación o código que invoque al
procedimiento tendrá que pasar un argumento por cada parámetro. El procedimiento
trabaja con una copia del valor, teniendo el parámetro su valor original al terminar la
ejecución del procedimiento.
 OUT. El valor de este parámetro puede ser cambiado en el procedimiento, y además su
valor modificado será enviado de vuelta al código o programa que invoca el
procedimiento.
 INOUT. Es una mezcla de los dos conceptos anteriores. La aplicación o código que invoca
al procedimiento puede pasarle un valor a éste, devolviendo el valor modificado al
terminar la ejecución.

Ejemplo:

Se creará una base de datos hospital.

CREATE DATABASE hospital;

Se selecciona la base de datos

USE hospital;

Se crea una tabla en la base de datos llamada paciente

CREATE TABLE paciente(


id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR (20) NOT NULL,
apellido VARCHAR (20) NOT NULL
PRIMARY KEY (id)
);
Se insertan algunos datos de prueba en la tabla paciente:

INSERT INTO paciente (nombre, apellido) values (‘Rosa’, ’Chávez’) ,


(‘Juan’, ‘Perez’), (‘Manuel’, ‘Rivera’), (‘Rogelio’, ‘Chávez’),
(‘Luisa’, ‘Mares’)

Una vez que se tiene configurada una base de datos con tablas, se pueden crear procedimientos
almacenados.

Al definir los procedimientos, se deben usar delimitadores para indicar a MySQL que se trata de un
bloque independiente. Con esto se indicará al gestor cuál será el carácter que indicará el fin de
instrucción.

Por ejemplo:
delimiter //

Procedimiento almacenado con parámetros IN

Delimiter //
CREATE PROCEDURE nuevoPaciente(IN n VARCHAR(20), ap VARCHAR(20))
BEGIN
Insert into paciente (nombre, apellido) values (n, ap);
END//
Delimiter ;

El nombre del paciente y apellidos están contenidos en los parámetros n y ap que se define como
IN. Suponiendo que se quiera insertar un nuevo paciente, se tiene que invocar al procedimiento
de este modo:

CALL nuevoPaciente(‘Ricardo’, ‘Rivera’);

Revisa el video siguiente.

 Guzmán, A. R., (2010), MySQL: procedures o procedimientos almacenados. Recuperado de


https://www.youtube.com/watch?v=1mXLGeCV3do

Procedimiento almacenado con parámetros OUT

Para ejemplificar el uso de este parámetro se obtendrá el número de pacientes existentes en la


tabla cuyo nombre inicie con una inicial.

DELIMITER //
CREATE PROCEDURE contarPacientes(
IN inicial VARCHAR(5),
OUT numero INT)
BEGIN
Select count(*)
INTO numero
FROM paciente
WHERE nombre like ´%´+inicial;
END//
DELIMITER ;

Al igual que antes, se pasa valor a buscar en variable inicial definido como IN. También, se define
número como parámetro OUT. Suponiendo que se quiera obtener el número de pacientes cuya
inicial sea igual a M, se debe llamar al procedimiento de este modo:
CALL contarPacientes(‘M’,@numero);
SELECT @numero AS cantidad;

Revisa el video siguiente que ejemplifica el procedimiento


 CodeStack, (2017), 81 - Procedimientos Almacenados: Parámetros de Entrada y Salida
[MariaDB 10/MySQL]. Recuperado de https://www.youtube.com/watch?v=uAqt9hDXdE4

Procedimiento almacenado con parámetros INOUT

Para ejemplificar, se creará un procedimiento que incremente una variable llamada suma.

DELIMITER //
CREATE PROCEDURE sumaId(
INOUT suma INT(255),
IN inicial varchar(5))
BEGIN
SELECT @sumaId = sum(id)
FROM paciente
WHERE nombre like ´%´+inicial;
SET suma = suma + @sumaId;
END$$
DELIMITER ;

En el procedimiento pasamos el parámetro suma como INOUT para que mantenga su valor tras la
ejecución del procedimiento. También definimos el parámetro inicial como IN para decirle al
procedimiento los pacientes que queremos sumar su id.
SET @suma=0
CALL sumaId(@suma, ‘M’)
CALL sumaId(@suma, ‘R’)
SELECT @suma

Revisa el video siguiente para ver cómo se utiliza paso a paso:

 CodeStack, (2017), 82 - Procedimientos Almacenados: Parámetros de Entrada/Salida


[MariaDB 10/MySQL]. Recuperado de https://www.youtube.com/watch?v=5qY2S_kUGoI

Referencias

 Edu Lázaro, (2019), Cómo crear y usar un procedimiento almacenado MySQL. Recuperado
de https://www.neoguias.com/procedimientos-almacenados-mysql/
 MySQL, (s.f.), 13.1.16 CREATE PROCEDURE and CREATE FUNCTION Statements.
Recuperado de https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

Referencias videos sugeridos

 CodeStack, (2017), 81 - Procedimientos Almacenados: Parámetros de Entrada y Salida


[MariaDB 10/MySQL]. Recuperado de https://www.youtube.com/watch?v=uAqt9hDXdE4
 CodeStack, (2017), 82 - Procedimientos Almacenados: Parámetros de Entrada/Salida
[MariaDB 10/MySQL]. Recuperado de https://www.youtube.com/watch?v=5qY2S_kUGoI
 Guzmán, A. R., (2010), MySQL: procedures o procedimientos almacenados. Recuperado de
https://www.youtube.com/watch?v=1mXLGeCV3do

También podría gustarte