1.9 空間演算子、空間プロシージャおよび空間ファンクション
SpatialのPL/SQL Application Programming Interface (API)には、いくつかの演算子と多くのプロシージャおよびファンクションが含まれています。
SDO_FILTERやSDO_RELATEなどの空間演算子は、空間索引を使用するときに、最適なパフォーマンスを提供します。(空間演算子は、最初のパラメータのジオメトリ列に空間索引が定義されている場合に最も効率的に実行されます。)空間演算子は、問合せのWHERE句で使用する必要があります。演算子の最初のパラメータには検索するジオメトリ列を指定し、2番目のパラメータには問合せウィンドウを指定します。問合せウィンドウにジオメトリ列と同じ座標系がない場合、Spatialによって暗黙的な座標系変換が実行されます。空間演算子の詳細は、「空間演算子」を参照してください。
空間プロシージャと空間ファンクションは、PL/SQLパッケージ内のサブプログラム(SDO_GEOM、SDO_CS、SDO_LRSなど)として提供されます。これらのサブプログラムでは、空間索引を定義する必要がなく、空間索引を定義しても使用されません。これらのサブプログラムは、WHERE句または副問合せで使用できます。空間プロシージャまたは空間ファンクションで2つのジオメトリが入力パラメータとして使用される場合は、両方のジオメトリの座標系が同じである必要があります。
ノート:
Spatialの演算子やサブプログラムに対する文字列(VARCHAR2)パラメータの中に数値がある場合は、ロケールにかかわらず、小数点にはピリオド(.)を使用する必要があります。例: 'distance=3.7'
空間演算子、空間プロシージャおよび空間ファンクションを使用する場合、パフォーマンスに関する次のガイドラインに従ってください。
-
演算子と、プロシージャまたはファンクションが比較可能な操作を実行し、その演算子が要件を満たす場合は、その演算子を使用します。たとえば、特に必要がないかぎり、SDO_GEOM.RELATEではなくSDO_RELATEを使用し、SDO_GEOM.WITHIN_DISTANCEではなくSDO_WITHIN_DISTANCEを使用します。
-
Oracle Database 23ai以降、空間問合せの
WHERE
句の演算子で使用される条件は、TRUE
と評価されるブール式にすることができます。たとえば、WHERE
句に条件SDO_WITHIN_DISTANCE(arg1, arg2, 'distance = <some_dist_val>')
を含める場合、この条件はTRUE
を返す必要があります。とはいえ、
SDO_WITHIN_DISTANCE(arg1, arg2, 'distance = <some_dist_val>') = 'TRUE'
(TRUE
は大文字のみ)の形式で条件を指定する古い構文も引き続きサポートされます。 -
問合せウィンドウが表から取り出された場合は、演算子に
/*+ ORDERED */
オプティマイザ・ヒントを使用します。(複数のウィンドウが表から取り出された場合は、このヒントを使用する必要があります。)詳細は、各演算子の「使用上のノート」および「例」を参照してください。
トポロジで演算子を使用する方法は、Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイドを参照してください。
親トピック: Spatialの概念