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はSQLServerのようには機能しません。戻り値のあるストアード・プロシージャーが必要な場合、それは本当に関数(UDF)である必要があります。他のC++関数と同様に、RETURNを指定する必要があります。また、関数であるため、callを使用する必要はありません。SELECT function()を使用するだけです

MySQLマニュアルでUDFに関する情報を調べてみてください。それを行うための非常に明確な助けがあります。

于 2011-09-20T15:34:20.633 に答える