Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
Algunas situaciones en que los procedimientos almacenados pueden ser particularmente útiles:
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.
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.
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:
USE hospital;
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 //
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:
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;
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
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