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

5 mysql stored-procedures ruby-on-rails output-parameter

我试图从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)
Run Code Online (Sandbox Code Playgroud)

2因此,它也适用于Rails,但它不会为我返回任何值:

ActiveRecord::Base.connection.execute("call sp_name(@id)")
ActiveRecord::Base.connection.execute("select @id")
Run Code Online (Sandbox Code Playgroud)

这是Rails中的日志

(2.0ms)  call sp_name(@id)
(0.1ms)  select @id
Run Code Online (Sandbox Code Playgroud)

我的问题是如何获得输出参数的返回值@id

小智 3

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

1 创建连接

client = Mysql2::Client.new(ActiveRecord::Base.configurations[Rails.env.to_s].symbolize_keys)
Run Code Online (Sandbox Code Playgroud)

2 使用此连接呼叫您的 sp

client.query "call sp_xxx"
Run Code Online (Sandbox Code Playgroud)

3 获取输出参数

result = client.query("select @output_parameter")
Run Code Online (Sandbox Code Playgroud)

4 返回输出

return !result.first["@output_parameter"].nil?
Run Code Online (Sandbox Code Playgroud)