我有一个动态创建的相当复杂的 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 数据库的连接正常,除了我手动创建的语句。
我找到了解决方案。
旧:
ActiveRecord::Base.connection.execute("SELECT ID from features")
新:
ActiveRecord::Base.connection.exec_query("SELECT ID from features").to_a
也许有人也有同样的问题。
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