关于MySQL存储过程的示例

use*_*490 1 mysql sql stored-procedures

你能不能在MySQL存储过程中给我一个简单的INOUT示例?

Mar*_*rco 5

我认为搜索谷歌会给你很多例子!!
一(取自这里

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 ;
Run Code Online (Sandbox Code Playgroud)

帖子说:

请注意,此存储过程的主体中有两条语句。第一个 select count(*) 语句计算名字等于 in 变量 firstName 的总人数。一旦获得计数,它就会将输出变量 totalUsers 设置为该值。

下一个语句是一个简单的选择。这将为名字等于 in 变量 firstName 的用户选择所有字段并返回记录集。因此,通过调用此存储过程并传入两个参数(名字、总数),将返回一个记录集并设置一个输出变量——然后可以查询该变量。

编辑:
如在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;
Run Code Online (Sandbox Code Playgroud)


Eri*_*ski 5

MySQL中INOUT使用示例:

从终端运行mysql -u root -p.

el@apollo:~$ mysql -u root -p
Enter password: 
Run Code Online (Sandbox Code Playgroud)

更改到您的数据库:

mysql> use yourdb;
Reading table information for completion of table and column names
Run Code Online (Sandbox Code Playgroud)

创建一个变量以提供给您调用的存储过程msg.

mysql> select 'ricksays' into @msg;
Query OK, 1 row affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

创建存储过程:

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

设置分隔符:

mysql> delimiter ;
Run Code Online (Sandbox Code Playgroud)

调用存储过程,传入变量.

mysql> call foobar(@msg);
Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

好的,现在看看它是否有效:

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

好吧它工作,它加入了一起.因此,您定义了一个变量msg,将该变量传递给名为foobar的存储过程,并且@msg由foobar写入.

INOUT参数的目的是什么.你可以用它来解决问题.