如何使用 Ruby Active Record 获取 sql 脚本的输出?

Posted

技术标签:

【中文标题】如何使用 Ruby Active Record 获取 sql 脚本的输出?【英文标题】:How can I get the output of a sql script using Ruby Active Record? 【发布时间】:2018-01-16 23:36:31 【问题描述】:

注意事项:使用 Ruby 2.4、oci8/oracle 增强适配器。

我使用 sqlplus 来执行我拥有的一些 DDL / DML。基本上是这样的:

system "echo / | sqlplus  #db.username/\"#db.password\"@#db.host:#db.port/#db.sid @\"#file_to_execute\" > #@SQLOUT_LOG"

我想放弃使用 sqlplus 并改用活动记录。所以我得到了这个工作:

ActiveRecord::Base.connection.execute(IO.read("#file_path"))

这基本上做同样的事情,除了:我无法访问从 SQLplus(甚至 SQLDeveloper)获得的“脚本输出”。这个“执行”函数返回表行,我通常不关心或不需要。

我只想要脚本运行后输出结果的字符串。示例:

过程MYPROCEDURE编译

已插入 3 行。

等等……

【问题讨论】:

【参考方案1】:
puts ActiveRecord::Base.connection.execute(IO.read("#file_path"))

【讨论】:

结果为0,不是输出的字符串。 点击result.methods 将引导您找到您正在寻找的正确方法,如果可能的话。您的问题相对含糊,没有可验证的工作示例,很难帮助您获得所需的输出。 我的意思是,我不知道如何才能清除它。我实际上只是想要我正在运行的语句的输出。通过 SQLplus 或 SQL 开发人员运行脚本通常会得到相同的输出。当我运行results.methods 时,我得到整数的结果。我不认为我正在使用它正确访问我想要的信息。 尝试在运行查询之前触发ActiveRecord::Base.logger = Logger.new(STDOUT); ActiveRecord::Base.logger.level = 0;,然后触发查询。这会返回您正在寻找的东西吗?如果是这样,您可以捕获日志的输出。 那只是用粉红色的字母输出脚本的内容,没有实际的结果输出。【参考方案2】:

我认为我已经确定无法使用 ActiveRecord 获取我想要获取的信息,并将尝试查看其他选项或继续使用 sqlplus。

【讨论】:

以上是关于如何使用 Ruby Active Record 获取 sql 脚本的输出?的主要内容,如果未能解决你的问题,请参考以下文章

ruby Active Record代码示例

如何使用 Active Record 查找具有重复数据的记录

Ruby Active Record加入并包括为count生成不同的sql

ruby 使用多态数据库模型自动创建Active Record关联:http://api.rubyonrails.org/classes/ActiveRecord/Associat

在 Ruby on Rails 4 中使用 Active Record 或 Squeel Gem 重写 SQL 查询

Ruby on Rails 变量在视图中显示 Active Record 数据而不是整数