Někdy může být nutné předat vstup uložené proceduře v MySQL. V tomto článku se podíváme na to, jak vytvořit uloženou proceduru MySQL s parametry a různými typy parametrů podporovanými uloženými procedurami.
Uložená procedura MySQL s parametry
Zde jsou kroky k vytvoření uložené procedury s parametry. MySQL podporuje 3 typy parametrů uložených procedur – IN, OUT a INOUT. Podívejme se na každou z nich podrobně
IN – Toto je výchozí režim. V tomto režimu musí příkaz volání předat argument uložené proceduře. Také hodnota parametru typu IN je chráněna, což znamená, že i když změníte její hodnotu uvnitř uložené procedury, zůstane mimo ni nezměněna.
VEN – Hodnotu parametru OUT lze změnit uvnitř uložené procedury a její nová hodnota bude předána zpět do příkazu volání.
VSTUP – V tomto případě může příkaz call předat argument a uložená procedura může tuto hodnotu upravit a předat ji zpět příkazu call.
Zde je syntaxe uložené procedury s parametry v MySQL.
[IN | OUT | INOUT] parameter_name datatype[(length)]
Ve výše uvedeném příkazu nejprve specifikujeme typ parametru, poté název parametru a typ sloupce.
Uložená procedura MySQL s příklady parametrů
Podívejme se na některé příklady uložené procedury s parametry.
Parametr IN
Zde je dotaz SQL pro vytvoření uložené procedury s parametrem IN.
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
Výše jsme definovali IN parametr uložené procedury prod_id . Když předáme její argument v příkazu call, uložená procedura vrátí očekávané výsledky. Pokud však neprojdete argumentem, zobrazí se chyba.
Bonusové čtení:Jak vytvořit složený primární klíč v MySQL
Parametr OUT
Zde je uložená procedura vytvořená pomocí parametru OUT.
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 | +--------+
Ve výše uvedené uložené proceduře definujeme 2 parametry – parametr IN pro prod_id a parametr OUT pro uložení výsledku procedury.
Když předáme ID produktu v příkazu volání, naše uložená procedura vypočítá počet řádků, které odpovídají tomuto ID produktu, a uloží výsledek do parametru OUT total
Bonusové čtení:Jak zkrátit tabulku v MySQL
Parametr INOUT
Zde je uložená procedura vytvořená pomocí parametru INOUT.
DELIMITER $$ CREATE PROCEDURE counter( INOUT count INT, IN increment INT ) BEGIN SET count = count + increment; END$$ DELIMITER ;
Ve výše uvedené uložené proceduře jsme definovali IN parametr increment a parametr INOUT počet který ukládá výsledek uložené procedury. Naše uložená procedura v podstatě přidává přírůstek počítat parametr a uloží výsledek v count parametr.
mysql> SET @count = 10; mysql> CALL counter(@count,1); mysql> SELECT @count; +--------+ | @count | +--------+ | 11 | +--------+
Doufejme, že nyní můžete snadno vytvořit uloženou proceduru s parametry v MySQL.
Bonusové čtení:MySQL DROP VIEW
Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!