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!