Понякога може да се наложи да предадете вход към съхранената процедура в MySQL. В тази статия ще разгледаме как да създадем MySQL съхранена процедура с параметри и различните типове параметри, поддържани в съхранените процедури.
Съхранена процедура на MySQL с параметри
Ето стъпките за създаване на съхранена процедура с параметри. MySQL поддържа 3 типа параметри на съхранените процедури – IN, OUT и INOUT. Нека разгледаме всеки от тях подробно
В – Това е режимът по подразбиране. В този режим операторът за повикване трябва да предаде аргумента на съхранената процедура. Също така стойността на параметър от типа IN е защитена, което означава, че дори ако промените стойността му в съхранената процедура, тя ще остане непроменена извън нея.
ВЪН – Стойността на параметър OUT може да бъде променена в съхранената процедура и новата му стойност ще бъде предадена обратно на оператора за повикване.
INOUT – В този случай операторът за повикване може да предаде аргумент, а съхранената процедура може да промени тази стойност и да я предаде обратно на оператора за повикване.
Ето синтаксиса на съхранената процедура с параметри в MySQL.
[IN | OUT | INOUT] parameter_name datatype[(length)] В горния израз първо указваме типа на параметъра, след това името на параметъра и типа на колоната.
Съхранена процедура на MySQL с примери за параметри
Нека разгледаме някои примери за съхранени процедури с параметри.
IN параметър
Ето SQL заявката за създаване на съхранена процедура с 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
По-горе сме дефинирали параметър на IN запомнена процедура prod_id . Когато предадем неговия аргумент в оператор за повикване, съхранената процедура връща очакваните резултати. Ако обаче не предадете аргумент, той дава грешка.
Бонус за четене:Как да създадете композитен първичен ключ в MySQL
OUT параметър
Ето съхранена процедура, създадена с помощта на параметър 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 |
+--------+
В горната съхранена процедура ние дефинираме 2 параметъра – IN параметър за prod_id и OUT параметър за съхраняване на резултата от процедурата.
Когато предадем идентификатор на продукт в оператор за повикване, нашата съхранена процедура изчислява броя на редовете, които съответстват на този идентификационен номер на продукта и съхранява резултата в OUT параметър total
Бонус за четене:Как да съкратите таблицата в MySQL
Параметър INOUT
Ето съхранена процедура, създадена с параметър INOUT.
DELIMITER $$
CREATE PROCEDURE counter(
INOUT count INT,
IN increment INT
)
BEGIN
SET count = count + increment;
END$$
DELIMITER ;
В горната съхранена процедура сме дефинирали IN параметър инкремент и INOUT параметър count който съхранява резултата от съхранената процедура. Нашата съхранена процедура основно добавя инкремента за преброяване параметър и съхранява резултата в брой параметър.
mysql> SET @count = 10; mysql> CALL counter(@count,1); mysql> SELECT @count; +--------+ | @count | +--------+ | 11 | +--------+
Надяваме се, че сега можете лесно да създадете съхранена процедура с параметри в MySQL.
Бонус четене:MySQL DROP VIEW
Ubiq улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!