sql >> Databáze >  >> RDS >> Mysql

Uložená procedura MySQL s parametry

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!

  1. Rozdělte data sloupců oddělených čárkami do dalších sloupců

  2. SQL dotaz na více hodnot v jedné buňce

  3. Klonování databází pomocí PSDatabaseClone

  4. Nastavení atributů připojení ODBC bez nutnosti psát kód