Ibland kan du behöva skicka indata till lagrad procedur i MySQL. I den här artikeln kommer vi att titta på hur man skapar MySQL lagrad procedur med parametrar och olika typer av parametrar som stöds i lagrade procedurer.
MySQL lagrad procedur med parametrar
Här är stegen för att skapa en lagrad procedur med parametrar. MySQL stöder 3 typer av lagrade procedurparametrar – IN, OUT och INOUT. Låt oss titta på var och en av dem i detalj
IN – Detta är standardläget. I detta läge måste anropssatsen skicka argumentet till den lagrade proceduren. Dessutom är parameterns värde av IN-typ skyddat, vilket innebär att även om du ändrar dess värde i den lagrade proceduren, kommer det att förbli oförändrat utanför den.
UT – En OUT-parameters värde kan ändras i den lagrade proceduren och dess nya värde kommer att skickas tillbaka till call-satsen.
INOUT – I det här fallet kan call-satsen skicka ett argument, och den lagrade proceduren kan ändra detta värde och skicka tillbaka det till call-satsen.
Här är syntaxen till lagrad procedur med parametrar i MySQL.
[IN | OUT | INOUT] parameter_name datatype[(length)] I ovanstående uttalande anger vi först typen av parameter, sedan parameternamnet och kolumntypen.
MySQL lagrad procedur med parameterexempel
Låt oss titta på några exempel på lagrad procedur med parametrar.
IN-parameter
Här är SQL-frågan för att skapa lagrad procedur med IN-parameter.
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
Ovan har vi definierat en IN lagrad procedur parameter prod_id . När vi skickar dess argument i call statement, returnerar den lagrade proceduren förväntade resultat. Men om du inte klarar ett argument ger det ett fel.
Bonus Läs:Hur man skapar en sammansatt primär nyckel i MySQL
OUT-parameter
Här är en lagrad procedur skapad med parametern 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 |
+--------+
I den lagrade proceduren ovan definierar vi 2 parametrar – en IN-parameter för prod_id och en OUT-parameter för att lagra resultatet av proceduren.
När vi skickar produkt-id i anropsuttrycket, beräknar vår lagrade procedur antalet rader som matchar detta produkt-id och lagrar resultatet i OUT-parametern totalt
Bonus Läs:Hur man trunkerar tabell i MySQL
INOUT-parameter
Här är en lagrad procedur skapad med parametern INOUT.
DELIMITER $$
CREATE PROCEDURE counter(
INOUT count INT,
IN increment INT
)
BEGIN
SET count = count + increment;
END$$
DELIMITER ;
I den lagrade proceduren ovan har vi definierat en IN-parameter inkrement och en INOUT-parameter count som lagrar resultatet av lagrad procedur. Vår lagrade procedur lägger i princip till ökningen att räkna parameter och lagrar resultatet i count parameter.
mysql> SET @count = 10; mysql> CALL counter(@count,1); mysql> SELECT @count; +--------+ | @count | +--------+ | 11 | +--------+
Förhoppningsvis kan du nu enkelt skapa lagrad procedur med parametrar i MySQL.
Bonus Läs:MySQL DROP VIEW
Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!