0

由于某些原因,我需要修补 oracle 增强适配器。

在我的 oracle_enhanced_adapter.rb 文件中,我需要获取 OCI8::Object::Mdsys::SdoGeometry.new 返回值,但它返回未初始化的常量OCI8::Object::Mdsys::SdoGeometry

但是,如果在执行 OCI8::Object::Mdsys::SdoGeometry.new 命令之前,我执行 OnlineGpsPoint.first 命令(OnlineGpsPoint 包含一个 sdo_geometry 列)并获取表中的一行 OCI8::Object::Mdsys: :SdoGeometry 将被初始化。

问题是我不想在我的程序中硬编码'OnlineGpsPoint'。我只需要 OCI8::Object::Mdsys::SdoGeometry 值。

有没有解决疼痛的办法?

4

1 回答 1

1

当 ruby​​-oci8 发现未知对象类型时,它会自动在 OCI8::Object 下定义一个 ruby​​ 类。如果知道对象类型名,最好提前定义ruby类,如下:

# Oracle object type name is *guessed* from the ruby class name.
#   SdoGeometry => SDO_GEOMETRY ==(public synonym)=> MDSYS.SDO_GEOMETRY
class SdoGeometry < OCI8::Object::Base
end

或者

# Set Oracle object type name explicitly
class AnyClassName < OCI8::Object::Base
  set_typename('MDSYS.SDO_GEOMETRY')
end

如果您想与自动生成的类同名:

module OCI8::Object::Mdsys
  class SdoGeometry < OCI8::Object::Base
    set_typename('MDSYS.SDO_GEOMETRY')
  end
end
于 2012-12-28T11:05:32.240 回答