如何从Rails中的MySQL存储过程获取输出参数?

发布于 2024-12-05 14:03:18 字数 747 浏览 0 评论 0原文

我正在尝试从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

独木成林 2024-12-12 14:03:18

我找到了一个获取输出参数的方法,分享给大家,如下:

1 创建一个连接

client = Mysql2::Client.new(ActiveRecord::Base.configurations[Rails.env.to_s].symbolize_keys)

2 使用这个连接调用你的sp

client.query "call sp_xxx"

3 获取输出参数

result = client.query("select @output_parameter")

4 返回输出

return !result.first["@output_parameter"].nil?

I found a way to get the output parameter, to share with you guys, see below:

1 to create a connection

client = Mysql2::Client.new(ActiveRecord::Base.configurations[Rails.env.to_s].symbolize_keys)

2 use this connection to call your sp

client.query "call sp_xxx"

3 to get the output parameter

result = client.query("select @output_parameter")

4 return the output

return !result.first["@output_parameter"].nil?
老子叫无熙 2024-12-12 14:03:18

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文