Rails 和 Oracle:执行 sql 语句并获取所有数据

问题描述 投票:0回答:2

我有一个动态创建的相当复杂的 sql 语句。但是简单的查询也存在同样的问题,所以我用这个作为例子。

我有一个功能模型。我可以打电话

Feature.count
--> 4

但是如果我尝试使用

ActiveRecord::Base.connection.execute("SELECT ID from features")
获取所有功能 id,结果是一个
OCI8::Cursor
对象。我不知道如何从中获取数据。

如果我尝试

ActiveRecord::Base.connection.execute("SELECT ID from features").fetch
我会得到
[1]
。有了
xyz.fetch_hash
,我得到了
{"ID" => 1}

我想要所有的身份证。 我刚刚从 PostgreSQL 切换到 Oracle。

使用 PostgreSQL,我使用

ActiveRecord::Base.connection.execute("SELECT ID from features").to_a
获取了所有数据,但是使用
to_a
gem (
activerecord-oracle_enhanced-adapter
) 不存在
*** NoMethodError Exception: undefined method 'to_a' for #<OCI8::Cursor:0x00000007028aa8>

我使用的是 Ruby 2.0 和 Rails 4。与 Oracle 数据库的连接正常,除了我手动创建的语句。

ruby-on-rails oracle-database ruby-on-rails-4
2个回答
13
投票

我找到了解决方案。

旧:

ActiveRecord::Base.connection.execute("SELECT ID from features")

新:

ActiveRecord::Base.connection.exec_query("SELECT ID from features").to_a

也许有人也有同样的问题。


0
投票

我的解决方案

  def my_exec_query(sql)
    # because our old framework does not have exec_query
    res = ActiveRecord::Base.connection.execute(sql)
    res_data = []
    res.fetch_hash { |d| res_data << d }
    res.close

    res_data
  end
© www.soinside.com 2019 - 2024. All rights reserved.