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!