出于某些原因,我需要修补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值。
是否有解决疼痛的方法?
答案 0 :(得分: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