Oracle と PostgreSQL の ST_Geometry 関数は、SQL (Structured Query Language) で実装されます。これはデータベース レベルの言語です。Oracle の場合は、PL/SQL (Procedural Language Structured Query Language) です。PostgreSQL の場合は PL/pgSQL です。
SQL 関数で Oracle または PostgreSQL データベースの ST_Geometry 列にアクセスする際には、データベースに直接アクセスすることになります。したがって、データベースが ST_Geometry 関数にアクセスできる必要があります。Oracle の場合、データベースは extproc プロセスも使用します。
SQLite の場合、ST_Geometry 関数は C の ST_Geometry ライブラリで実装されています。ST_Geometry 関数を使用するには、ST_Geometry ライブラリにアクセスする必要があります。
PostgreSQL
st_geometry ライブラリは、PostgreSQL が ST_Geometry 関数にアクセスできるよう、PostgreSQL インストール ディレクトリに格納する必要があります。Windows の st_geometry.dll ファイルを、PostgreSQL インストール ディレクトリの lib フォルダーにコピーする必要があります。Linux サーバーの場合は、Linux の st_geometry.so ファイルを、PostgreSQL サーバーの /usr/lib/pgsql ディレクトリにコピーします。これらのファイルは、両方とも、ArcGIS クライアントのインストール場所の DatabaseSupport フォルダーにあります。
Oracle
関数は PL/SQL で実装されており、これによって、C プログラミング言語で記述された外部共有ライブラリ ファイルの関数が呼び出されます。関数は、ライブラリ名 (Oracle の ST_Geometry の場合は ST_SHAPELIB) をライブラリ ファイル名にマップするエイリアス名で PL/SQL から呼び出されます。(詳細については、Oracle の CREATE LIBRARY コマンドに関するドキュメントをご参照ください。) ST_SHAPELIB を必要とする空間タイプ関数が初めて呼び出されたときには、SQL セッションに対する extproc プロセスの生成がデータベースからリスナーにリクエストされます。extproc には、ST_SHAPELIB の場所、呼び出す関数の名前、およびそのパラメーターが渡されます。extproc によって ST_SHAPELIB が読み込まれ、関数が呼び出されます。外部関数が完了すると、extproc は結果を返し、アクティブ状態のままこのセッションで追加の関数呼び出しを待ちます。extproc プロセスは、SQL セッションが切断されると終了します。
この機能を使用するためには、以下の設定が必要です。
- データベースが、リスナー プロセスおよび extproc に情報を渡せるように、ST_SHAPELIB が含まれたファイルの場所を認識できる必要があります。
- ST_Geometry の演算子と関数は、user_libraries テーブルにある ST_SHAPELIB 用の file_spec がサーバー上の ST_SHAPELIB の物理的なファイルの場所に一致しなければ機能しません。このため、Oracle ユーザー ライブラリでライブラリの定義を更新して、CREATE LIBRARY コマンドで ST_SHAPELIB が含まれたファイルへの正しいライブラリ パスを含めるようにします。
- データベースが、extproc へのリクエストを処理するサービスを認識できる必要があります。これは tnsnames.ora ファイルで設定します。
- extproc には、ST_SHAPELIB を含むファイルの読み込み権限が必要です。この権限は、listener.ora ファイル (Oracle 10g) または extproc.ora ファイル (Oracle 11g) で環境変数 EXTPROC_DLLS を定義して設定します。
- (通常は ORACLE_HOME を所有するユーザーで実行される) extproc には、ライブラリ ファイルの場所に対する読み取り権限と、ファイルの実行権限が必要です。
- listener.ora ファイルを変更した場合は、リスナーを再起動する必要があります。
SQLite
SQLite クライアントが SQL 関数にアクセスできるようにするには、ST_Geometry ライブラリの場所を指定して、ライブラリを読み込む必要があります。ライブラリの場所は、クライアントの PATH (Windows) または LIBPATH (Linux) システム環境変数で設定したり、ST_Geometry ライブラリを読み込むときにパスで指定したりできます。手順については、「SQLite の ST_Geometry ライブラリの読み込み」をご参照ください。