MySQL Stored Procedure Parameters
MySQL Stored Procedure Parameters
Summary: in this tutorial, you will learn how to create stored procedures with parameters, including IN , OUT , and INTOUT parameters.
Typically, stored procedures have parameters, making them more useful and reusable.
IN parameters
IN is the default mode. When de�ning an IN parameter in a stored procedure, the calling program must pass an argument to the stored procedure.
Additionally, the value of an IN parameter is protected. This means that even if you change the value of the IN parameter inside the stored procedure, its
original value remains unchanged after the stored procedure ends. In other words, the stored procedure works only on the copy of the IN parameter.
OUT parameters
The value of an OUT parameter can be modi�ed within the stored procedure, and its updated value is then passed back to the calling program.
Note that stored procedures cannot access the initial value of the OUT parameter when they begin.
INOUT parameters
An INOUT parameter is a combination of IN and OUT parameters. This means that the calling program may pass the argument, and the stored procedure
can modify the INOUT parameter and pass the new value back to the calling program.
De�ning a parameter
In this syntax,
• First, specify the parameter mode, which can be IN , OUT or INOUT depending on the purpose of the parameter in the stored procedure.
• Second, provide the name of the parameter. The parameter name must follow the naming rules of the column name in MySQL.
• Third, de�ne the data type and maximum length of the parameter.
The following example creates a stored procedure that �nds all o�ces that are located in a country speci�ed by the input parameter countryName :
DELIMITER //
DELIMITER ;
CALL GetOfficeByCountry('USA');
To �nd o�ces in France , you pass the literal string France to the GetOfficeByCountry stored procedure as follows:
CALL GetOfficeByCountry('France')
Because the countryName is the IN parameter, you must pass an argument. If you don’t do so, you’ll get an error:
CALL GetOfficeByCountry();
Error Code: 1318. Incorrect number of arguments for PROCEDURE classicmodels.GetOfficeByCountry; expected 1, got 0
The following de�nes a stored procedure that returns the number of orders based on their order status.
DELIMITER $$
DELIMITER ;
• The total is the OUT parameter that stores the number of orders in a speci�c status.
To �nd the number of orders that already shipped, you call GetOrderCountByStatus and pass the order status as of Shipped , and also pass a session
variable ( @total ) to receive the return value.
CALL GetOrderCountByStatus('Shipped',@total);
SELECT @total;
Output:
+--------+
| @total |
+--------+
| 303 |
+--------+
1 row in set (0.00 sec)
To get the number of orders that are in process, you call the stored procedure GetOrderCountByStatus as follows:
CALL GetOrderCountByStatus('In Process',@total);
SELECT @total AS total_in_process;
Output:
+------------------+
| total_in_process |
+------------------+
| 6 |
+------------------+
1 row in set (0.00 sec)
The following example demonstrates how to use an INOUT parameter in a stored procedure:
DELIMITER $$
DELIMITER ;
In this example, the stored procedure SetCounter() accepts one INOUT parameter ( counter ) and one IN parameter ( inc ). It increases the counter (
counter ) by the value speci�ed by the inc parameter.
SET @counter = 1;
CALL SetCounter(@counter,1); -- 2
CALL SetCounter(@counter,1); -- 3
CALL SetCounter(@counter,5); -- 8
SELECT @counter; -- 8
In this tutorial, you have learned how to create stored procedures with parameters including IN , OUT , and INOUT parameters.