Soms moet u mogelijk invoer doorgeven aan de opgeslagen procedure in MySQL. In dit artikel zullen we bekijken hoe u een MySQL-opgeslagen procedure kunt maken met parameters en de verschillende soorten parameters die worden ondersteund in opgeslagen procedures.
MySQL-opgeslagen procedure met parameters
Hier zijn de stappen om een opgeslagen procedure met parameters te maken. MySQL ondersteunt 3 soorten parameters voor opgeslagen procedures:IN, OUT en INOUT. Laten we ze allemaal in detail bekijken
IN – Dit is de standaardmodus. In deze modus moet de call-instructie het argument doorgeven aan de opgeslagen procedure. Ook is de waarde van een IN-type parameter beschermd, wat betekent dat zelfs als u de waarde binnen de opgeslagen procedure wijzigt, deze daarbuiten ongewijzigd blijft.
UIT – De waarde van een OUT-parameter kan worden gewijzigd in de opgeslagen procedure en de nieuwe waarde wordt teruggegeven aan de call-instructie.
INOUT – In dit geval kan de call-instructie een argument doorgeven, en de opgeslagen procedure kan deze waarde wijzigen en teruggeven aan de call-instructie.
Hier is de syntaxis voor de opgeslagen procedure met parameters in MySQL.
[IN | OUT | INOUT] parameter_name datatype[(length)] In de bovenstaande verklaring specificeren we eerst het type parameter, daarna de parameternaam en het type kolom.
MySQL-opgeslagen procedure met parametervoorbeelden
Laten we eens kijken naar enkele voorbeelden van opgeslagen procedures met parameters.
IN-parameter
Hier is de SQL-query om een opgeslagen procedure te maken met de 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
Hierboven hebben we een IN opgeslagen procedureparameter gedefinieerd prod_id . Wanneer we het argument doorgeven in de call-instructie, retourneert de opgeslagen procedure de verwachte resultaten. Als u echter geen argument doorgeeft, geeft het een foutmelding.
Bonus lezen:Samengestelde primaire sleutel maken in MySQL
OUT-parameter
Hier is een opgeslagen procedure gemaakt met de OUT-parameter.
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 |
+--------+
In de bovenstaande opgeslagen procedure definiëren we 2 parameters:een IN-parameter voor prod_id en een OUT-parameter om het resultaat van de procedure op te slaan.
Wanneer we product-ID doorgeven in oproepinstructie, berekent onze opgeslagen procedure het aantal rijen dat overeenkomt met dit product-ID en slaat het resultaat op in OUT-parameter totaal
Bonus Lezen:Tabel in MySQL afkappen
INOUT-parameter
Hier is een opgeslagen procedure die is gemaakt met de INOUT-parameter.
DELIMITER $$
CREATE PROCEDURE counter(
INOUT count INT,
IN increment INT
)
BEGIN
SET count = count + increment;
END$$
DELIMITER ;
In de bovenstaande opgeslagen procedure hebben we een IN-parameter gedefinieerd increment en een INOUT-parameter count waarin het resultaat van de opgeslagen procedure wordt opgeslagen. Onze opgeslagen procedure voegt in feite de increment . toe te tellen parameter en slaat het resultaat op in count parameter.
mysql> SET @count = 10; mysql> CALL counter(@count,1); mysql> SELECT @count; +--------+ | @count | +--------+ | 11 | +--------+
Hopelijk kun je nu gemakkelijk een opgeslagen procedure met parameters maken in MySQL.
Bonus lezen:MySQL DROP VIEW
Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!