Appels de fonction ST_Geometry
Les fonctions ST_Geometry dans Oracle et PostgreSQL sont implémentées en langage SQL (Structured Query Language). Il s'agit d'un langage au niveau de la base de données. Dans Oracle, il s'agit du langage PL/SQL (Procedural Language Structured Query Language). Dans PostgreSQL, le langage utilisé est PL/pgSQL.
Lorsque vous accédez aux colonnes ST_Geometry à l'aide de fonctions SQL, vous accédez directement à la base de données. Par conséquent, la base de données doit être en mesure d'accéder aux fonctions ST_Geometry. Dans Oracle, la base de données engendre également un processus extproc.
PostgreSQL
La bibliothèque st_geometry doit être stockée dans le répertoire d'installation de PostgreSQL pour permettre à PostgreSQL d'accéder aux fonctions ST_Geometry. Si vous installez ArcSDE sur le même serveur Windows que PostgreSQL à l'aide de l'assistant d'installation d'ArcSDE pour PostgreSQL, le fichier st_geometry.dll est copié dans le dossier lib de PostgreSQL. Si votre base de données se trouve sur un serveur différent d'ArcSDE ou si vous procédez à l'installation sur un serveur Linux, vous devez copier manuellement la bibliothèque dans le répertoire d'installation de PostgreSQL. Sur les serveurs Linux, copiez la bibliothèque st_geometry.so dans le répertoire /usr/lib/pgsql.
Oracle
Les fonctions sont implémentées dans PL/SQL, qui appelle les fonctions écrites en langage de programmation C dans les fichiers de bibliothèque partagés externes. Les fonctions sont appelées à partir de PL/SQL à l'aide d'un nom d'alias qui fait correspondre le nom de la bibliothèque (dans le cas de ST_Geometry dans Oracle, ST_SHAPELIB) avec le nom du fichier de bibliothèque. (Pour plus d'informations, consultez la documentation relative à la commande Oracle CREATE LIBRARY.) La première fois qu'une fonction de type spatial qui requiert ST_SHAPELIB est appelée, la base de données demande au processus d'écoute d'engendrer un processus extproc pour la session SQL. Il est fourni au processus extproc l'emplacement de ST_SHAPELIB, le nom de la fonction à appeler ainsi que ses paramètres. Le processus extproc charge ST_SHAPELIB et appelle la fonction. Lorsque la fonction externe prend fin, le processus extproc renvoie les résultats et reste actif, dans l'attente d'appels de fonction supplémentaires au cours de la session. Le processus extproc prend fin à la déconnexion de la session SQL.
Pour que cela fonctionne, la configuration suivante est nécessaire :
- La base de données a besoin de connaître l'emplacement du fichier contenant ST_SHAPELIB, de manière à pouvoir transmettre cette information au processus d'écoute, puis au processus extproc.
- Si le fichier file_spec de ST_SHAPELIB dans la table user_libraries ne correspond pas à l'emplacement du fichier physique de ST_SHAPELIB sur le serveur, les opérateurs et fonctions ST_Geometry ne fonctionnent pas. Par conséquent, vous devez mettre à jour la définition de bibliothèque dans les bibliothèques utilisateur Oracle pour inclure le chemin d'accès correct de bibliothèque au fichier contenant ST_SHAPELIB à l'aide de la commande LIBRARY CREATE. Remarque :
la modification de la définition du chemin d'accès à la bibliothèque invalide les corps de paquetage qui y font référence, par conséquent les corps de certains paquetages de procédures stockées ArcSDE doivent être recompilés à l'aide d'Oracle.
- La base de données doit savoir quel service gère les requêtes envoyées au processus extproc. Cela est configuré dans le fichier tnsnames.ora.
- Le processus extproc doit être autorisé à charger le fichier contenant ST_SHAPELIB. Pour ce faire, la variable d'environnement EXTPROC_DLLS est définie dans le fichier listener.ora.
- Le processus extproc (exécuté généralement en tant qu'utilisateur propriétaire d'ORACLE_HOME) doit détenir des autorisations de lecture concernant l'emplacement des fichiers de bibliothèques et des droits d'exécution sur ces fichiers.
- Une fois sa configuration modifiée, le processus d'écoute doit être redémarré pour appliquer les changements.