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!