ST_Geometry 関数呼び出し
Oracle と PostgreSQL の ST_Geometry 関数は、SQL(Structured Query Language)で実装されます。これはデータベース レベルの言語です。Oracle の場合は、PL/SQL(Procedural Language Structured Query Language)です。PostgreSQL の場合は PL/pgSQL です。
SQL 関数で ST_Geometry 列にアクセスする際には、データベースに直接アクセスすることになります。したがって、データベースが ST_Geometry 関数にアクセスできる必要があります。Oracle の場合、データベースは extproc プロセスも使用します。
PostgreSQL
st_geometry ライブラリは、PostgreSQL が ST_Geometry 関数にアクセスできるよう、PostgreSQL インストール ディレクトリに格納する必要があります。ArcSDE for PostgreSQL インストール ウィザードで PostgreSQL と同じ Windows サーバ上に ArcSDE をインストールすると、st_geometry.dll が PostgreSQL lib フォルダにコピーされます。データベースが ArcSDE 以外のサーバ上にある場合、または Linux サーバにインストールする場合は、ライブラリを手動で PostgreSQL のインストール ディレクトリにコピーする必要があります。Linux サーバーでは、st_geometry.so ライブラリを /usr/lib/pgsql ディレクトリにコピーします。
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 が含まれたファイルへの正しいライブラリ パスを含めるようにします。 メモ:
このライブラリ パスの定義を変更すると、このパスを参照しているパッケージ本体が無効になります。したがって、ArcSDE ストアド プロシージャ パッケージの中には、Oracle でのパッケージ本体の再コンパイルが必要なものもあります。
- データベースが、extproc へのリクエストを処理するサービスを認識できる必要があります。これは tnsnames.ora ファイルで設定します。
- extproc には、ST_SHAPELIB を含むファイルの読み込み権限が必要です。この権限は、listener.ora ファイルで環境変数 EXTPROC_DLLS を定義して設定します。
- (通常は ORACLE_HOME を所有するユーザとして実行される)extproc には、ライブラリ ファイルの場所についての読み取り権限と、ファイルの実行権限が必要です。
- コンフィグレーションの変更後は、変更を有効にするためにリスナーを再起動する必要があります。