Понякога може да се наложи да предадете вход към съхранената процедура в 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 улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!