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 列が含まれています) を実行し、テーブルの行の 1 つ 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 に答える