私は、Ruby on Rails、DB(MS) ドライバー、およびストアド プロシージャの間の長年にわたる愛憎関係に精通しており、バージョン 2.3.2 から Rails アプリケーションを開発しています。
ただし、時々、(はるかに遅い) アプリケーション レベルでデータを結合するよりも SP の方が適しているという状況が発生します。特に、複数のテーブルのデータを組み合わせたレポートの実行は、通常、SP に適しています。
ストアド プロシージャがまだ Rails や MySQL gem に十分に統合されていないのはなぜですか。私は現在、Rails 3.0.10 と MySQL2 gem 0.2.13 を使用したプロジェクトに取り組んでいますが、私が見る限り、最新の Edge Rails と MySQL gem 0.3+ でさえ、SP を使用すると癇癪を起こします。
SP が呼び出された後にデータベース接続が失われるという問題は、これまでも今も続いています。
>> ActiveRecord::Base.connection.execute("CALL stored_proc")
=> #<Mysql::Result:0x103429c90>
>> ActiveRecord::Base.connection.execute("CALL stored_proc")
ActiveRecord::StatementInvalid: Mysql::Error: Commands out of sync;
[...]
>> ActiveRecord::Base.connection.active?
=> false
>> ActiveRecord::Base.connection.reconnect!
=> nil
>> ActiveRecord::Base.connection.execute("CALL proc01")
=> #<Mysql::Result:0x1034102e0>
>> ActiveRecord::Base.connection.active?
=> false
これは技術的に取り組むのが本当に難しい問題ですか、それとも Rails による設計上の選択ですか?