sql >> Base de Datos >  >> RDS >> Mysql

Procedimiento almacenado de MySQL con parámetros

A veces, es posible que deba pasar la entrada al procedimiento almacenado en MySQL. En este artículo, veremos cómo crear un procedimiento almacenado de MySQL con parámetros y los diferentes tipos de parámetros admitidos en los procedimientos almacenados.

Procedimiento almacenado MySQL con parámetros

Estos son los pasos para crear un procedimiento almacenado con parámetros. MySQL admite 3 tipos de parámetros de procedimientos almacenados:IN, OUT e INOUT. Veamos cada uno de ellos en detalle

EN - Este es el modo por defecto. En este modo, la declaración de llamada tiene que pasar el argumento al procedimiento almacenado. Además, el valor de un parámetro de tipo IN está protegido, lo que significa que incluso si cambia su valor dentro del procedimiento almacenado, permanecerá sin cambios fuera de él.

FUERA – El valor de un parámetro OUT se puede cambiar dentro del procedimiento almacenado y su nuevo valor se devolverá a la declaración de llamada.

ENTRADA – En este caso, la declaración de llamada puede pasar un argumento y el procedimiento almacenado puede modificar este valor y devolverlo a la declaración de llamada.

Aquí está la sintaxis del procedimiento almacenado con parámetros en MySQL.

[IN | OUT | INOUT] parameter_name datatype[(length)]

En la declaración anterior, primero especificamos el tipo de parámetro, luego el nombre del parámetro y el tipo de columna.

Procedimiento almacenado de MySQL con ejemplos de parámetros

Veamos algunos ejemplos de procedimientos almacenados con parámetros.

Parámetro ENTRADA

Aquí está la consulta SQL para crear un procedimiento almacenado con el parámetro IN.

mysql> DELIMITER //

mysql> CREATE PROCEDURE get_product(
       IN prod_id int
       )
       BEGIN
       SELECT *
        FROM products
       WHERE product_id = prod_id;
       END //

mysql> DELIMITER ;
mysql> call get_product(1);
+------------+--------------+-------+
| product_id | product_name | price |
+------------+--------------+-------+
|          1 | iPhone 11    |   400 |
+------------+--------------+-------+

mysql> call get_product();
ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE sample.get_product; expected 1, got 0

Arriba, hemos definido un parámetro de procedimiento almacenado IN prod_id . Cuando pasamos su argumento en la declaración de llamada, el procedimiento almacenado devuelve los resultados esperados. Sin embargo, si no pasa un argumento, entonces da un error.

Lectura adicional:Cómo crear una clave principal compuesta en MySQL

Parámetro de SALIDA

Aquí hay un procedimiento almacenado creado usando el parámetro OUT.

mysql> DELIMITER $$

mysql> CREATE PROCEDURE get_count(
       IN prod_id int,
       OUT total INT
       )
       BEGIN
       SELECT COUNT(*)
       INTO total
       FROM products
       WHERE product_id = prod_id;
       END$$

mysql> DELIMITER ;

mysql> call get_count(1,@total);

mysql> select @total;
+--------+
| @total |
+--------+
|      1 |
+--------+

En el procedimiento almacenado anterior, definimos 2 parámetros:un parámetro IN para prod_id y un parámetro OUT para almacenar el resultado del procedimiento.

Cuando pasamos la identificación del producto en la declaración de llamada, nuestro procedimiento almacenado calcula el recuento de filas que coinciden con esta identificación del producto y almacena el resultado en el parámetro OUT total

Lectura adicional:Cómo truncar una tabla en MySQL

Parámetro ENTRADA/SALIDA

Aquí hay un procedimiento almacenado creado usando el parámetro INOUT.

DELIMITER $$

CREATE PROCEDURE counter(
	INOUT count INT,
    IN increment INT
)
BEGIN
	SET count = count + increment;
END$$

DELIMITER ;

En el procedimiento almacenado anterior hemos definido un parámetro IN incremento y un parámetro INOUT count que almacena el resultado del procedimiento almacenado. Nuestro procedimiento almacenado básicamente agrega el incremento para contar parámetro y almacena el resultado en count parámetro.

mysql> SET @count = 10;

mysql> CALL counter(@count,1);

mysql> SELECT @count;
+--------+
| @count |
+--------+
|     11 |
+--------+

Con suerte, ahora puede crear fácilmente un procedimiento almacenado con parámetros en MySQL.

Lectura adicional:MySQL DROP VIEW

Ubiq facilita la visualización de datos en minutos y la supervisión en paneles en tiempo real. ¡Pruébalo hoy!