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値は、今回のリリースの形式になります。

ジオメトリは、先に外部の輪、次に内部の輪の順に順序付けされ、各座標は正しいローテーション(外部の輪は反時計回り、内部の輪は時計回り)で保存されます。

リレーショナル・モデルからアップグレードする場合の使用上のノート

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');