【问题标题】:How to make ActiveRecord access a table from a dblink (correctly)?如何使 ActiveRecord 从 dblink 访问表(正确)?
【发布时间】:2011-08-10 14:39:27
【问题描述】:

我正在使用 Oracle 数据库开发一个 RoR 项目。最近我向另一个数据库添加了一个 DBLink,这完全可以从 SQL 中运行。 当我想使用以下代码将表格添加到我的班级时...

class ServerModel < ActiveRecord::Base 
  set_table_name "S985.S985_947_MODELS_VW@R985_A947.WORLD"
  set_primary_key "model_barcode"

  acts_as_reportable
  acts_as_entity
end

...我收到此错误:

NativeException: java.sql.SQLException: ORA-02084: database name is missing a component
: select * from (SELECT "S985"."S985_947_MODELS_VW"@"R985_A947"."WORLD".* FROM "S985"."S985_947_MODELS_VW"@"R985_A947"."WORLD"  ) where rownum <= 14

当然,这个自动使用的查询不起作用。它不应该选择"S985"."S985_947_MODELS_VW"@"R985_A947"."WORLD".*,而应该只选择"S985"."S985_947_MODELS_VW".*,而不重复dblink (@R985_947.WORLD) 的名称。

这可以通过set_table_name 方法或任何其他ActiveRecord 方法实现吗?

答案看起来很简单,但我找不到解决方案。有人可以帮我解决这个问题吗?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby oracle activerecord dblink


    【解决方案1】:

    不确定是否要调整 Active Record 以包含 DB 链接名称,但是如何创建远程表的视图,例如:

    create or replace view S985_947_MODELS_VW
    as
    select * from S985_947_MODELS_VW"@"R985_A947"."WORLD"
    

    然后只是访问 ROR 应用程序中的视图?不确定是否可以插入、更新视图等 - 您需要检查一下。我有一种感觉,可以更新和插入一个“简单”视图(即单个表上的一个没有 group by 等的视图)。

    【讨论】:

    • 我只有一个问题:我的 default_scope 有一个格式错误的查询字符串错误 %'。我的方法是:default_scope :conditions => ["FULLNAME like '/IT INFRASTRUCTURE/HARDWARE/SERVER/PHYSICAL/\%' OR FULLNAME like '/IT INFRASTRUCTURE/HARDWARE/OTHER/\%'"] 我使用 % 作为通配符。
    • 你能看到它在 named_scope 的幕后生成的实际查询字符串,还是在到达那个点之前就出错了?
    • 我已经找到了解决方案。使用“像 FULLNAME 一样?或像 FULLNAME 一样?,'/IT INFRASTRUCTURE/HARDWARE/SERVER/PHYSICAL/\%','/IT INFRASTRUCTURE/HARDWARE/OTHER/\%'”奇怪地完成了这项工作。不过还是谢谢!
    • 很抱歉再次提出这个问题,但是您找到数据库链接解决方案了吗?我无法在我当前的数据库配置中创建视图或表
    【解决方案2】:

    establish_connection 是你要找的吗?

    http://apidock.com/rails/ActiveRecord/Base/establish_connection/class

    您可以使用它为您选择的模型设置特定于类的连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多