Nogle gange skal du muligvis sende input til lagret procedure i MySQL. I denne artikel vil vi se på, hvordan man opretter MySQL-lagrede procedurer med parametre og de forskellige typer parametre, der understøttes i lagrede procedurer.
MySQL-lagret procedure med parametre
Her er trinene til at oprette en lagret procedure med parametre. MySQL understøtter 3 typer lagrede procedureparametre - IN, OUT og INOUT. Lad os se på hver af dem i detaljer
IN – Dette er standardtilstanden. I denne tilstand skal opkaldssætningen videregive argumentet til den lagrede procedure. En IN-type parameters værdi er også beskyttet, hvilket betyder, at selvom du ændrer dens værdi inde i den lagrede procedure, vil den forblive uændret uden for den.
UD – En OUT-parameters værdi kan ændres i den lagrede procedure, og dens nye værdi vil blive sendt tilbage til opkaldserklæringen.
INOUT – I dette tilfælde kan call-sætningen sende et argument, og den lagrede procedure kan ændre denne værdi og sende den tilbage til call-sætningen.
Her er syntaksen til lagret procedure med parametre i MySQL.
[IN | OUT | INOUT] parameter_name datatype[(length)]
I ovenstående sætning angiver vi først parametertypen, derefter parameternavnet og kolonnetypen.
MySQL-lagret procedure med parametereksempler
Lad os se på nogle eksempler på lagret procedure med parametre.
IN-parameter
Her er SQL-forespørgslen til at oprette en lagret procedure med IN-parameteren.
mysql> DELIMITER //mysql> OPRET PROCEDURE get_product( IN prod_id int ) BEGIN SELECT * FROM products WHERE product_id =prod_id; END //mysql> DELIMITER;mysql> kald get_product(1);+------------+--------------+------ -+| produkt_id | produktnavn | pris |+------------+--------------+------+| 1 | iPhone 11 | 400 |+-------------+--------------+-------+mysql> call get_product();FEJL 1318 (42000 ):Forkert antal argumenter for PROCEDURE sample.get_product; forventet 1, fik 0
Ovenfor har vi defineret en IN stored procedure parameter prod_id . Når vi sender dets argument i call statement, returnerer den lagrede procedure forventede resultater. Men hvis du ikke sender et argument, giver det en fejl.
Bonus Læs:Sådan opretter du sammensat primær nøgle i MySQL
OUT-parameter
Her er en lagret procedure oprettet ved hjælp af OUT parameter.
mysql> DELIMITER $$mysql> OPRET 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> kald get_count(1,@total);mysql> vælg @total;+--------+| @total |+--------+| 1 |+--------+
I ovenstående lagrede procedure definerer vi 2 parametre – en IN parameter for prod_id og en OUT parameter til at gemme resultatet af proceduren.
Når vi sender produkt-id i opkaldserklæring, beregner vores lagrede procedure antallet af rækker, der matcher dette produkt-id, og gemmer resultatet i OUT-parameteren total
Bonus Læs:Sådan afkortes tabel i MySQL
INOUT-parameter
Her er en lagret procedure oprettet ved hjælp af INOUT parameter.
DELIMITER $$CREATE PROCEDURE tæller( INOUT tæller INT, IN trin INT)BEGIN SET count =tæller + stigning;END$$DELIMITER;
I ovenstående lagrede procedure har vi defineret en IN-parameter increment og en INOUT-parameter count som gemmer resultatet af den lagrede procedure. Vores lagrede procedure tilføjer grundlæggende tilvæksten at tælle parameter og gemmer resultatet i count parameter.
mysql> SET @count =10;mysql> CALL counter(@count,1);mysql> SELECT @count;+--------+| @count |+--------+| 11 |+--------+
Forhåbentlig kan du nu nemt oprette lagret procedure med parametre i MySQL.
Bonus Læs:MySQL DROP VIEW
Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!