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:
- Utilice el comando
CREATE PROCEDURE
para crear un procedimiento almacenado MySQL seguido delprocedure-name
. Los nombres de los procedimientos no distinguen entre mayúsculas y minúsculas, lo que significa quenew_proc
yNEW_PROC
son lo mismo. - Una base de datos no puede tener dos procedimientos con el mismo nombre.
- Se pueden delimitar los nombres de los procedimientos. Si el nombre está delimitado, se permiten espacios.
- El nombre de un procedimiento no debe exceder los 64 caracteres.
- No utilice los nombres de función integrados predeterminados de MySQL como nombres de procedimiento; de lo contrario, dará lugar a un error.
- Un par de paréntesis
()
forman el componente final deCREATE PROCEDURE
. Los paréntesis contienen parámetros; si no hay parámetros, utilice paréntesis vacíos. - La siguiente sección es donde se escriben las declaraciones.
- Especifique los parámetros como
OUT
,IN
oINOUT
, 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.