【问题标题】:How to get output parameters from MySQL stored procedure in Rails?如何从 Rails 中的 MySQL 存储过程获取输出参数?
【发布时间】:2011-09-20 05:36:15
【问题描述】:

我正在尝试从 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的返回值?

【问题讨论】:

  • 使用存储过程的真正原因是什么?有特殊要求吗?如果是这样,不要忘记在整个开发团队中保持版本控制和维护是很困难的
  • 你用什么 gem 做 mysql ?
  • @Fivell 我正在使用 mysql2

标签: mysql ruby-on-rails stored-procedures output-parameter


【解决方案1】:

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

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?

【讨论】:

  • 上帝指导我找到这个解决方案。
【解决方案2】:

MySQL 不像 SQL Server 那样工作。如果您想要一个具有返回值的存储过程,那么您真的想要它是一个函数 (UDF)。您需要像任何 C++ 函数一样指定 RETURN。你也不需要使用调用,因为它是一个函数。只需使用 SELECT 函数()

尝试在 MySQL 手册中查找有关 UDF 的信息。对此有非常明确的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-21
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多