sql >> Database teknologi >  >> RDS >> Mysql

MySQL lagret procedure med parametre

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!

  1. Trim bagerste rum med PostgreSQL

  2. PostgreSQL hvordan man sammensætter intervalværdi '2 dage'

  3. Understøtter Oracle fuldtekstsøgning?

  4. Send tabel som parameter til sql server UDF