28 SDO_MIGRATEパッケージ(アップグレード)
MDSYS.SDO_MIGRATEパッケージには、1つのサブプログラムSDO_MIGRATE.TO_CURRENTが含まれています。
この章で説明するSDO_MIGRATE.TO_CURRENTサブプログラムには、プロシージャとファンクションの両方のインタフェースがあります。プロシージャの場合、以前のリリースのSpatial and Graphから空間ジオメトリ表をアップグレードできます。また、ファンクションの場合は、単一のSDO_GEOMETRYオブジェクトをアップグレードできます。
このサブプログラムは、使用上のノートが非常に限定されています。「使用上のノート」を参照してください。
親トピック: リファレンス情報
28.1 SDO_MIGRATE.TO_CURRENT
構文(オブジェクト・リレーショナル・モデル実装から今回のリリースへのアップグレード)
SDO_MIGRATE.TO_CURRENT( tabname IN VARCHAR2 [, column_name IN VARCHAR2]);
または
SDO_MIGRATE.TO_CURRENT( tabname IN VARCHAR2, column_name IN VARCHAR2 [, commit_int IN NUMBER]);
構文(単一のオブジェクト・リレーショナル・モデル・ジオメトリから今回のリリースへのアップグレード)
SDO_MIGRATE.TO_CURRENT( geom IN SDO_GEOMETRY, dim IN SDO_DIM_ARRAY ) RETURN SDO_GEOMETRY;
構文(リレーショナル・モデル実装から今回のリリースへのアップグレード)
SDO_MIGRATE.TO_CURRENT( layer IN VARCHAR2, newtabname IN VARCHAR2, gidcolumn IN VARCHAR2, geocolname IN VARCHAR2, layer_gtype IN VARCHAR2, updateflag IN VARCHAR2);
説明
サポートされなくなったSpatialリレーショナル・モデル(リリース8.1.5以前)から現行のリリースにデータをアップグレードするか、またはアップグレードする必要のある1つ以上のオブジェクト・リレーショナル・モデル(リリース8.1.6以降)のジオメトリをアップグレードします(「使用上のノート」を参照)。プロシージャの場合、TO_CURRENTは、レイヤー全体(列内のすべてのジオメトリ)をアップグレードします。ファンクションの場合、TO_CURRENTは、SDO_GEOMETRY型の単一のジオメトリ・オブジェクトをアップグレードします。
レイヤーをアップグレードする場合、プロシージャの構文は、Spatialのリレーショナル・モデル(リリース8.1.5以下)からアップグレードするか、またはオブジェクト・リレーショナル・モデル(リリース8.1.6以上)からアップグレードするかによって異なります。適用されるモデルについては、「使用上のノート」を参照してください。
ノート:
このプロシージャは2次元ジオメトリにのみ適用されます。これは3次元ジオメトリではサポートされていません。
パラメータ
- tabname
-
ジオメトリ・オブジェクトが格納されている表を指定します。
- column_name
-
ジオメトリ・オブジェクトを含む
tabname
の列を指定します。column_name
が指定されていないか、またはNULLが指定されている場合は、ジオメトリ・オブジェクトを含む列がアップグレードされます。 - commit_int
-
Oracle Spatial and Graphによって内部コミット操作が実行される前にアップグレードするジオメトリの数を指定します。
commit_int
を指定しない場合、アップグレード時に内部コミット操作が実行されません。commit_int
値を指定すると、この値を指定しない場合より小規模なロールバック・セグメントを使用できます。 - geom
-
今回のリリースにアップグレードする単一のジオメトリ・オブジェクトを指定します。
- dim
-
アップグレードするジオメトリ・オブジェクトの次元情報の配列を指定します。SDO_DIM_ARRAY型の詳細は、「DIMINFO」を参照してください。
- layer
-
アップグレードするレイヤーの名前を指定します。
- newtabname
-
データのアップグレード先となる新しい表の名前を指定します。
- gidcolumn
-
古い表からGIDを格納する列名を指定します。
- geocolname
-
ジオメトリ・オブジェクトを挿入する新しい表の列名を指定します。
- layer_gtype
-
POINTまたはNOTPOINT(デフォルト)のいずれかを指定します。
アップグレードするレイヤーがすべて点データである場合、このパラメータをPOINTに設定すると、最適なパフォーマンスが得られます。それ以外の場合は、NOTPOINTを指定します。レイヤーに点以外のジオメトリが含まれる場合に、値をPOINTに設定すると、アップグレードによって無効なデータが生成される場合があります。
- updateflag
-
UPDATEまたはINSERT(デフォルト)のいずれかを指定します。
既存の属性の表に移入するアップグレードの場合は、UPDATEを指定します。それ以外の場合は、INSERTを指定します。
オブジェクト・リレーショナル・モデル・レイヤー、および単一のジオメトリからアップグレードする場合の使用上のノート
このサブプログラムは、Oracle Spatial and Graphの通常のアップグレードを行う際には必要ありません。これは、空間データがサード・パーティのローダーを使用してロードされる場合で、結果のジオメトリの方向が誤っているかETYPE値やGTYPE値が無効な場合に必要になることがあります。空間データをロードおよび検証する際の推奨手順の一部としてこのサブプログラムを使用する方法については、「空間データのロードおよび検査の推奨手順」を参照してください。
このサブプログラムによって、指定されたレイヤー内の指定のジオメトリ・オブジェクトまたはすべてのジオメトリ・オブジェクトがアップグレードされるため、SDO_GTYPE値およびSDO_ETYPE値は、今回のリリースの形式になります。
-
「SDO_GTYPE」に示す形式(DLTT)で、4桁のSDO_GTYPE値が作成されます。
-
SDO_ETYPE値については、「SDO_ELEM_INFO」を参照してください。
ジオメトリは、先に外部の輪、次に内部の輪の順に順序付けされ、各座標は正しいローテーション(外部の輪は反時計回り、内部の輪は時計回り)で保存されます。
リレーショナル・モデルからアップグレードする場合の使用上のノート
Spatialのリレーショナル・モデル(リリース8.1.5以下)からアップグレードする場合、このプロシージャを使用する際には次を考慮してください。
-
このプロシージャをコールする前に、新しい表を作成しておく必要があります。
-
アップグレードするデータが測地の場合、許容差(<layername>_SDODIM表またはビュー内のSDO_TOLERANCE列の値)は、10進度(たとえば0.00000005)で表す必要があります。
-
このプロシージャによって、ジオメトリがリレーショナル・モデルからオブジェクト・リレーショナル・モデルに変換されます。
-
このプロシージャで、コミット操作が実行されます。
-
アップグレード・ステップのいずれかが失敗すれば、レイヤーでは何もアップグレードされません。
-
layer
には、基になるレイヤー名を_SDOGEOM接尾辞を付けずに指定します。 -
アップグレード前のSDO_GIDは、
gidcolumn
に格納されます。 -
「SDO_GTYPE」に示す形式(DLTT)で、4桁のSDO_GTYPE値が作成されます。
-
「SDO_ELEM_INFO」に示す値を使用して、SDO_ETYPE値が作成されます。
-
このプロシージャは、先に外部の輪、次に内部の輪の順になるようにジオメトリの順序付けを行い、正しいローテーション(外部の輪は反時計回り、内部の輪は時計回り)で各座標を保存します。
例
次の例では、ROADS表内のジオメトリ・オブジェクトの定義を、リリース8.1.5より上の形式から今回のリリースの形式へ変更します。
EXECUTE SDO_MIGRATE.TO_CURRENT('ROADS');
親トピック: SDO_MIGRATEパッケージ(アップグレード)