5

我正在尝试从 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

4

2 回答 2

3

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

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?
于 2011-12-27T03:52:13.827 回答
0

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

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

于 2011-09-20T15:34:20.633 回答