Пример INOUT для хранимой процедуры MySQL - PullRequest
1 голос
/ 06 марта 2012

Не могли бы вы дать мне простой пример INOUT в хранимой процедуре MySQL?

Ответы [ 3 ]

5 голосов
/ 07 декабря 2013

Пример использования INOUT в MySQL:

Из терминала запустите mysql -u root -p.

el@apollo:~$ mysql -u root -p
Enter password: 

Перейдите в базу данных:

mysql> use yourdb;
Reading table information for completion of table and column names

Создайте переменнуюпередать в вашу хранимую процедуру с именем msg.

mysql> select 'ricksays' into @msg;
Query OK, 1 row affected (0.00 sec)

Создать хранимую процедуру:

mysql> delimiter //
mysql> create procedure foobar (inout msg varchar(100))
-> begin
-> set msg = concat(@msg, " never gonna let you down");
-> end//

Установить разделитель обратно:

mysql> delimiter ;

Вызватьхранимая процедура, передайте переменную.

mysql> call foobar(@msg);
Query OK, 0 rows affected (0.00 sec)

Хорошо, теперь посмотрим, сработало ли это:

mysql> select @msg;
+-----------------------------------+
| @msg                              |
+-----------------------------------+
| ricksays never gonna let you down |
+-----------------------------------+
1 row in set (0.00 sec)

Хорошо, сработало, соединило строки.Итак, вы определили переменную msg, передали эту переменную в хранимую процедуру с именем foobar, а @msg был записан в foobar.

Что является целью параметра INOUT.Вы можете использовать это для решения проблем.

4 голосов
/ 06 марта 2012

Я думаю, что поиск в Google даст вам множество примеров !!
Один (взят из здесь )

DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`get_users` $$
CREATE PROCEDURE `get_users`(
    IN firstName VARCHAR(100),
    OUT totalUsers INT
)
BEGIN
    SELECT COUNT(*) INTO totalUsers
    FROM users
    WHERE first_name = firstName;
    SELECT * FROM users
    WHERE first_name = firstName;
END $$
DELIMITER ;

В сообщении говорится:

Обратите внимание, что в теле этой хранимой процедуры есть два оператора.Первый оператор select count (*) подсчитывает общее количество людей, чье имя совпадает с переменной firstName.Как только он получает счетчик, он устанавливает переменную totalUsers в это значение.

Следующее утверждение является простым выбором.Это выберет все поля для пользователей, чье имя равно переменной in firstName и вернет набор записей.Таким образом, вызывая эту хранимую процедуру и передавая два параметра (имя, общее количество), будет возвращен набор записей и будет установлена ​​переменная out, к которой затем можно обратиться.

EDITED:
Как на веб-сайте MySQL :

CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT)
BEGIN
  # Set value of OUT parameter
  SELECT VERSION() INTO ver_param;
  # Increment value of INOUT parameter
  SET incr_param = incr_param + 1;
END;
3 голосов
/ 28 марта 2012

Если, как и я, путаница заключалась в разнице между OUT и INOUT. Что было разъяснено с этими пунктами, найденными в MySQL Certification Study Guide

OUT - любое значение, которое имеет параметр при его передаче, игнорируется процедуры, и ее начальное значение в процедуре равно NULL

INOUT - значение, переданное вызывающей стороной, является начальным параметром значение в процедуре

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...