プライマリ・コンテンツに移動
Oracle® Spatial and Graph開発者ガイド
12cリリース1 (12.1)
B72470-07
目次へ移動
目次
索引へ移動
索引

前
次

23.34 SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT

書式

SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT(     
  geom_table      IN VARCHAR2,      
  geom_column     IN VARCHAR2,      
  result_table    IN VARCHAR2,      
  commit_interval IN NUMBER DEFAULT -1,       
  conditional     IN VARCHAR2 DEFAULT 'TRUE' ,      
  flag10g         IN VARCHAR2 DEFAULT 'FALSE',      
  geom_schema     IN VARCHAR2 DEFAULT NULL); 

説明

格納済のジオメトリがジオメトリ・オブジェクトに対して定義された規則に従っているかどうかを判断するためにジオメトリ列を検査し、無効なジオメトリに関するコンテキスト情報を戻します。

パラメータ

geom_table

空間ジオメトリ表を指定します。geom_schemaパラメータが指定されていないかぎり、schema.table形式で指定できます(たとえばscott.shapesなど)。

geom_column

検査するジオメトリ・オブジェクト列を指定します。

result_table

検査結果を格納する結果表を指定します。無効なジオメトリの場合、result_tableに行が追加されます。無効なジオメトリが存在しない場合、結果がDONEである1つ以上(commit_interval値によって異なる)の行が追加されます。

commit_interval

Spatial and Graphが内部コミット操作を実行し、結果がDONEである行をresult_tableに書き込む(最後のコミット後に無効なジオメトリの行が書き込まれなかった場合)前に検査するジオメトリの数を指定します。commit_intervalを指定しない場合、検査時には内部コミット操作は実行されません。

commit_intervalオプションは、検査の実行中にresult_tableの内容を参照する必要がある場合に有効です。

conditional

条件付きのフラグを指定します(3次元の複合表面または複合ソリッドにのみ適用)。文字列値がTRUE (デフォルト)である場合、2つの外部の輪が同じ平面にあり、エッジを共有していると、検証は行われなくなります。文字列値がFALSEである場合、2つの外部の輪が同じ平面にあり、エッジを共有していても検証を行います。

flag10g

Oracle Database 10g互換性フラグ。文字列値がTRUEである場合、2次元ジオメトリに固有の検証のみが実行され、3次元固有の検証は実行されません。文字列値がFALSE(デフォルト)である場合は、ジオメトリに関連するすべての検証が実行されます。(flag10gパラメータの詳細は、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションの「使用上の注意」を参照してください。)

geom_schema

geom_table表のスキーマを指定します(現在のスキーマと異なる場合)。geom_schemaが指定されている場合、geom_tableパラメータはschema.table形式で指定できません。

使用上の注意

データで空間操作を実行する前に、すべてのジオメトリ・データを検査し、検査エラーがあれば修正する必要があります(「空間データのロードおよび検査の推奨手順」を参照)。

このプロシージャは、結果表に検査の結果をロードします。

このプロシージャをコールする前に、空の結果表(result_tableパラメータに指定する表)を作成する必要があります。この結果表の形式は、(sdo_rowid ROWID, result VARCHAR2(2000))です。result_tableが空の場合は、行が追加される前にプロシージャによって自動的に切り捨てられます。

結果表には、それぞれの無効なジオメトリに1つの行が含まれます。ジオメトリが有効な場合、次の場合を除き、行は書き込まれません。

  • commit_intervalが指定されていない場合(またはcommit_interval値がレイヤーのジオメトリの数より大きい場合)、無効なジオメトリが検出されないと、RESULT値がDONEである単一行が書き込まれます。

  • commit_intervalが指定されている場合、ある内部コミットとその直前の内部コミット(または初回の内部コミットの検査の開始時)との間に無効なジオメトリが検出されないと、最後に検査されたジオメトリの主キーおよびRESULT値がDONEである単一行が書き込まれます。(最後の内部コミット操作後に無効なジオメトリが存在しない場合、結果がDONEである前の行がこの行に置換されます。)

無効なジオメトリの各行のSDO_ROWID列には、無効なジオメトリを含む行のROWID値が含まれます。また、RESULT列にはOracleエラー・メッセージ番号およびエラーのコンテキスト(ジオメトリが無効になった原因の座標、エッジまたは輪)が含まれます。エラー・メッセージを検索すると、失敗の原因の詳細を参照できます。

このプロシージャは、レイヤー(geom_column)の各ジオメトリについて次のことを確認します。

  • SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションによって実行されるすべてのジオメトリ・タイプの一貫性チェックおよびジオメトリの一貫性チェック(SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションの「使用上の注意」を参照)

  • ジオメトリのSRID値(座標系)がUSER_SDO_GEOM_METADATAビュー(「ジオメトリのメタデータ・ビュー」を参照)のDIMINFO列で指定した値と同じか

次の例では、COLA_MARKETS表のSHAPE列に格納されているジオメトリ・オブジェクトを検査します。この例では、結果表の作成も含めて示しています。検査の実行前に、意図的に無効な状態で作成されているジオメトリが表に挿入されたと想定します。

-- Is a layer valid? (First, create the result table.)
CREATE TABLE val_results (sdo_rowid ROWID, result varchar2(1000));
-- (Next statement must be on one command line.)
CALL SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('COLA_MARKETS','SHAPE','VAL_RESULTS');

Call completed.

SQL> SELECT * from val_results;

SDO_ROWID                                                                       
------------------                                                              
RESULT                                                                          
--------------------------------------------------------------------------------
                                                                                
Rows Processed <12>                                                             
                                                                                
AAABXNAABAAAK+YAAC                                                              
13349 [Element <1>] [Ring <1>][Edge <1>][Edge <3>]