sql >> Databasteknik >  >> RDS >> Mysql

MySQL lagrad procedur med parametrar

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!

  1. PostgreSQL:Varför kan psql inte ansluta till servern?

  2. Fatalt fel:Anrop till odefinierad funktion session_register()

  3. Månader mellan två datum

  4. Hur CAST() fungerar i SQL Server