【问题标题】:How can I get the output of a sql script using Ruby Active Record?如何使用 Ruby Active Record 获取 sql 脚本的输出?
【发布时间】: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 行。

等等……

【问题讨论】:

    标签: ruby oracle activerecord sqlplus oracle-call-interface


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 2011-04-07
      • 2010-12-06
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多