如何从Rails中的MySQL存储过程获取输出参数?
我正在尝试从 MySQL 存储过程获取输出参数,让我们看一下下面的示例:
1 在 mysql 中,我创建了这个过程并且它可以工作。
CREATE PROCEDURE sp_name (out id int)
Begin
select id into @id from table order by id desc limit 1;
End
mysql> call sp_deduct_credit_and_money(@id);
Query OK, 0 rows affected (0.01 sec)
mysql> select @id;
+--------------+
| @id |
+--------------+
| 24 |
+--------------+
1 row in set (0.00 sec)
2 因此,它在Rails中也可以工作,但它不会为我返回任何值:
ActiveRecord::Base.connection.execute("call sp_name(@id)")
ActiveRecord::Base.connection.execute("select @id")
这是Rails中的日志
(2.0ms) call sp_name(@id)
(0.1ms) select @id
我的问题是如何获取输出参数@id
的返回值?
I'm trying to get a output parameter from MySQL stored procedure, let's have look a example below:
1 In mysql I created this procedure and it works.
CREATE PROCEDURE sp_name (out id int)
Begin
select id into @id from table order by id desc limit 1;
End
mysql> call sp_deduct_credit_and_money(@id);
Query OK, 0 rows affected (0.01 sec)
mysql> select @id;
+--------------+
| @id |
+--------------+
| 24 |
+--------------+
1 row in set (0.00 sec)
2 Therefore, it also works in Rails, BUT it won't return any value for me:
ActiveRecord::Base.connection.execute("call sp_name(@id)")
ActiveRecord::Base.connection.execute("select @id")
Here is the log in Rails
(2.0ms) call sp_name(@id)
(0.1ms) select @id
My question is that how could I get the return value of the output parameter @id
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我找到了一个获取输出参数的方法,分享给大家,如下:
1 创建一个连接
2 使用这个连接调用你的sp
3 获取输出参数
4 返回输出
I found a way to get the output parameter, to share with you guys, see below:
1 to create a connection
2 use this connection to call your sp
3 to get the output parameter
4 return the output
MySQL 的工作方式与 SQL Server 不同。如果您想要一个带有返回值的存储过程,那么您确实希望它是一个函数 (UDF)。您需要像任何 C++ 函数一样指定 RETURN。另外你不需要 use call,因为它是一个函数。只需使用 SELECT function()
尝试在 MySQL 手册中查找有关 UDF 的信息。有非常明确的帮助来做到这一点。
MySQL doesnt work like SQL Server. If you want a store procedure with a return value, that you really want it's a function (UDF). You need specify the RETURN like any C++ function. Also you dont need use call, because its a function. Just use SELECT function()
Try to look up info about UDF in MySQL manual. There is very explicity help for do that.