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 PROCEDUREpara 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_procyNEW_PROCson 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,INoINOUT, 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.
