sql >> Database >  >> RDS >> Mysql

MySQL opgeslagen procedure met parameters

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!

  1. Geavanceerde SQL:CROSS APPLY en OUTER APPLY

  2. MariaDB CURRENT_DATE() uitgelegd

  3. Oracle:hoe voeg ik minuten toe aan een tijdstempel?

  4. hoe SQL-query's te schrijven?