gpt4 book ai didi

mysql - 为什么 Rails (3+) 仍然不支持存储过程?

转载 作者:IT王子 更新时间:2023-10-28 23:48:32 25 4
gpt4 key购买 nike

我熟悉 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 的设计选择?

最佳答案

rails 支持存储过程。您得到的不同步错误是因为在 Rails 中默认情况下未启用 MySQL 的 MULTI_STATEMENTS 标志。此标志允许过程返回超过 1 个结果集。

有关如何启用它的代码示例,请参见此处:https://gist.github.com/wok/1367987

存储过程在 MS SQL Server 中开箱即用。

我在几乎所有基于 mySQL 和 SQL Server 的 Rails 项目中都使用了存储过程,但没有任何发布。

关于mysql - 为什么 Rails (3+) 仍然不支持存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11657160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com