如何使用 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 脚本的输出?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Active Record 查找具有重复数据的记录
Ruby Active Record加入并包括为count生成不同的sql
ruby 使用多态数据库模型自动创建Active Record关联:http://api.rubyonrails.org/classes/ActiveRecord/Associat