Procedimiento almacenado de MySQL con parámetros

Preet Sanghavi 20 junio 2023
Procedimiento almacenado de MySQL con parámetros

Este tutorial educa sobre los procedimientos almacenados de MySQL y demuestra cómo podemos crearlos con y sin parámetros.

Procedimiento almacenado de MySQL con parámetros

Un procedimiento almacenado es un subprograma o un bloque de código que define para realizar una tarea específica; son similares a las funciones de otros lenguajes de programación.

Los procedimientos se almacenan en una base de datos relacional y se pueden llamar y utilizar varias veces. Debe asignar un nombre al crear un procedimiento almacenado.

Además, también puede proporcionarle parámetros. A continuación se muestra la sintaxis para crear un procedimiento almacenado de MySQL.

Sintaxis para crear un procedimiento almacenado de MySQL

CREATE
    [DEFINER = user]
    PROCEDURE [IF  NOT  EXISTS] procedure_name  ([procedure_parameters[,...]])
    [characteristic  ...]  routine_body
    procedure_parameters: [ IN | OUT | INOUT ] parameters_name type
    type : _Any valid MySQL _data type
    characteristic: {
    COMMENT  '_string_'
    | LANGUAGE  SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL  DATA | MODIFIES SQL  DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    }
routine_body: Valid SQL routine statement

Si encuentra que la sintaxis anterior es abrumadora, puede consultar la versión más simple de la sintaxis anterior que se proporciona a continuación.

DELIMITER {custom delimiter}
CREATE PROCEDURE procedure_name([IN | OUT | INOUT] param_1 [DATATYPE], ...)
BEGIN
// Your Code
END;
{custom delimiter}

Llamar al procedimiento almacenado de MySQL

Podemos usar el siguiente comando para call al procedimiento almacenado de MySQL una vez que se crea.

call procedure_name(param_1, param2,...);

Mantenga los siguientes puntos al alcance de su mano mientras crea un procedimiento almacenado en MySQL:

  1. Utilice el comando CREATE PROCEDURE para crear un procedimiento almacenado MySQL seguido del procedure-name. Los nombres de los procedimientos no distinguen entre mayúsculas y minúsculas, lo que significa que new_proc y NEW_PROC son lo mismo.
  2. Una base de datos no puede tener dos procedimientos con el mismo nombre.
  3. Se pueden delimitar los nombres de los procedimientos. Si el nombre está delimitado, se permiten espacios.
  4. El nombre de un procedimiento no debe exceder los 64 caracteres.
  5. No utilice los nombres de función integrados predeterminados de MySQL como nombres de procedimiento; de lo contrario, dará lugar a un error.
  6. Un par de paréntesis () forman el componente final de CREATE PROCEDURE. Los paréntesis contienen parámetros; si no hay parámetros, utilice paréntesis vacíos.
  7. La siguiente sección es donde se escriben las declaraciones.
  8. Especifique los parámetros como OUT, IN o INOUT, que es válido solo para procedimientos. Debemos seguir este paso si queremos pasar parámetros.

el parámetro IN en el procedimiento almacenado de MySQL

El parámetro IN pasa el valor a un procedimiento almacenado.

DELIMITER //
CREATE PROCEDURE simple_addition (IN param_1 INT, IN param_2 INT)
BEGIN
    SELECT param_1 + param_2;
END //
DELIMITER ;

CALL simple_addition(2,4); #produces 6 as output

Producción :

param_1 + param_2
6

el parámetro OUT en MySQL Stored Procedure

Podemos actualizar el valor del parámetro OUT dentro del procedimiento almacenado, que luego se devuelve a un programa de llamada.

DELIMITER //
CREATE PROCEDURE simple_addition (IN param_1 INT, IN param_2 INT, OUT param_3 INT)
BEGIN
    SET param_3 = param_1 + param_2;
END //
DELIMITER ;

CALL simple_addition(2,4, @output_var);
SELECT @output_var;

Producción :

@output_var
6

el parámetro INOUT en el procedimiento almacenado de MySQL

Un parámetro INOUT combina los parámetros IN y OUT. El programa que llama puede pasar un argumento, que puede ser modificado por el procedimiento almacenado y devuelve el nuevo valor al programa que llama.

DELIMITER //
CREATE PROCEDURE counter(INOUT set_counter INT, IN increment INT)
BEGIN
    SET set_counter = set_counter + increment;
END //
DELIMITER ;

SET @counter = 1;
CALL counter(@counter,2); -- 3
CALL counter(@counter,5); -- 8
SELECT @counter; -- 8

Producción :

@counter
8

Aquí, estamos usando incremento como parámetro de entrada, mientras que set_counter es un parámetro de entrada y salida.

Características del procedimiento almacenado de MySQL

MySQL le da acceso para describir las características del procedimiento que está creando.

characteristic: {
    COMMENT  '_string_'
    | LANGUAGE  SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL  DATA | MODIFIES SQL  DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    }

Estas características van seguidas de paréntesis y precedidas de la cláusula BEGIN. Sin embargo, estas características son opcionales; no tiene que escribir estas líneas de código cada vez explícitamente.

Característica Explicación
COMMENT Se utiliza para describir la rutina almacenada; todos los detalles se muestran en la declaración MOSTRAR CREAR PROCEDIMIENTO.
LANGUAGE Indica que el cuerpo del procedimiento fue escrito en SQL.
[NO] DETERMINISTA Una rutina se considera “determinista” si produce consistentemente el mismo resultado para los mismos parámetros de entrada y “no determinista” si no lo hace.
CONTIENE SQL Indica que la rutina no contiene declaraciones que lean o escriban datos.
SIN SQL Indica la presencia de declaraciones NO SQL en el procedimiento.
LEE DATOS SQL El procedimiento solo comprende sentencias que leen datos, como el comando SELECT.
MODIFICA DATOS SQL Un programa contiene sentencias que podrían escribir datos como MODIFICA DATOS SQL (por ejemplo, INSERTAR o ELIMINAR).
`DEFINIDOR DE SEGURIDAD SQL{ INVOCADOR}`

Todos los valores anteriores de las cláusulas características están por defecto. Por ejemplo, los siguientes dos procedimientos almacenados producen el mismo resultado.

DELIMITER //
CREATE PROCEDURE procedure_name ()
BEGIN
    SELECT CURRENT_DATE();
END //
DELIMITER ;

call procedure_name(); -- 2022-09-05

El código anterior es el mismo que cuando las características se mencionan explícitamente.

DELIMITER //
CREATE PROCEDURE procedure_name ()
COMMENT ''
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
BEGIN
    SELECT CURRENT_DATE();
END //
DELIMITER ;

call procedure_name(); -- 2022-09-05

Entonces, hemos aprendido cómo usar parámetros con procedimientos en MySQL.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Artículo relacionado - MySQL Stored Procedure