Présentation rapide de l'utilisation de SQL avec ST_Geometry
Vous pouvez utiliser le langage SQL (Structured Query Language), les types de données et les formats de tables du système de gestion de base de données (SGBD) pour exploiter les informations stockées dans une géodatabase ou une base de données où le type ST_Geometry est installé. Le langage SQL est un langage de base de données qui prend en charge les définitions de données et les commandes de manipulation de données.
L'accès aux données via SQL permet aux applications externes d'utiliser les données tabulaires gérées par la géodatabase ou la base de données. Ces applications externes peuvent être des applications de base de données non spatiales ou des applications spatiales personnalisées développées dans un environnement autre qu'ArcObjects.
Lorsque vous insérez des données ou modifiez les données d'une géodatabase ou base de données avec SQL, exécutez une instruction COMMIT ou ROLLBACK une fois que l'instruction SQL a été exécutée pour vous assurer que les modifications sont validées dans la base de données ou annulées. Vous éviterez ainsi de maintenir les verrous sur les lignes, pages ou tables que vous modifiez.
Insertion de données ST_Geometry avec SQL
Vous pouvez utiliser SQL pour insérer des données spatiales dans une table de base de données ou de géodatabase comportant une colonne ST_Geometry. Utilisez les fonctions constructeur ST_Geometry pour insérer des types de géométrie spécifiques. Vous pouvez également faire en sorte que la sortie de certaines fonctions d'opérations spatiales soient la sortie d'une table existante.
Lorsque vous insérez une géométrie dans une table avec SQL, tenez compte des points suivants :
- Vous devez spécifier un identifiant de référence spatiale valide (SRID).
- Pour continuer à utiliser la table avec ArcGIS, le champ utilisé comme ObjectID ne peut pas avoir la valeur Null.
Identifiants de référence spatiale
Le SRID que vous stipulez lors de l'insertion d'une géométrie dans une table dans Oracle qui utilise le type spatial ST_Geometry doit être dans la table ST_SPATIAL_REFERENCES et avoir un enregistrement correspondant dans la table SDE.SPATIAL_REFERENCES. Le SRID que vous stipulez lors de l'insertion d'une géométrie dans une table dans PostgreSQL qui utilise le type spatial ST_Geometry doit être dans la table public.sde_spatial_references. A partir de la version 10.1 d'ArcGIS, ces tables sont prérenseignées avec des références spatiales et des SRID.
Le SRID que vous stipulez lors de l'insertion d'une géométrie dans une table dans SQLite qui utilise le type spatial ST_Geometry (un type geometryblob) doit être dans la table st_spatial_reference_systems.
Si vous devez utiliser une référence spatiale personnalisée non présente dans la table, la méthode la plus simple consiste à charger ou à créer une classe d'entités avec les valeurs de référence spatiale valides au moyen d'ArcGIS for Desktop. Assurez-vous que la classe d'entités que vous créez utilise le stockage ST_Geometry. Cette opération crée un enregistrement dans les tables SDE.SPATIAL_REFERENCES et ST_SPATIAL_REFERENCES dans Oracle, un enregistrement dans la table public.sde_spatial_references dans PostgreSQL ou un enregistrement dans la table st_aux_spatial_reference_systems_table dans SQLite.
Dans les géodatabases, vous pouvez interroger la table COUCHES (Oracle) ou sde_layers (PostgreSQL) pour découvrir le SRID attribué à la table spatiale. Vous pouvez alors utiliser ce SRID quand vous créez des tables spatiales et insérez des données à l'aide de SQL.
Si vous le souhaitez, vous pouvez ajouter une référence spatiale à la table ST_SPATIAL_REFERENCES ou sde_spatial_references à l'aide de SQL. Reportez-vous à la rubrique Création de références spatiales avec SQL pour plus d'informations.
Pour en savoir plus sur les SRID et les systèmes de référence spatiale, reportez-vous aux rubriques Qu'est-ce qu'un SRID ? et Références spatiales.
ObjectID, identifiants
Pour qu'ArcGIS interroge les données, la table doit contenir un champ d'identifiant unique.
Les classes d'entités créées avec ArcGIS disposent toujours d'un champ ObjectID qui est utilisé comme champ d'identifiant. Lorsque vous insérez des enregistrements dans la classe d'entités avec ArcGIS, une valeur unique est toujours insérée dans le champ ObjectID. Le champ ObjectID dans une table de géodatabase est géré par ArcGIS. Le champ ObjectID dans une table de base de données créé dans ArcGIS est géré par le SGBD.
Lorsque vous insérez des enregistrements dans une table de géodatabase avec SQL, vous devez utiliser la fonction Next_RowID pour obtenir et insérer une valeur ObjectID valide. Lorsque vous utilisez SQL pour insérer des enregistrements dans une table de base de données qui a été créée dans ArcGIS, le SGBD renseigne le champ ObjectID à l'aide d'une valeur.
Les tables de base de données que vous créez en dehors d'ArcGIS doivent comporter un champ (ou plusieurs champs) qu'ArcGIS peut utiliser comme ObjectID. Si vous utilisez le type de données d'auto-incrémentation natif de votre base de données pour le champ ID de votre table, ce champ est renseigné par le SGBD lorsque vous insérez un enregistrement avec SQL. Si vous gérez manuellement les valeurs dans votre champ d'identifiant unique, n'oubliez pas d'attribuer une valeur unique à l'ID lors de l'édition de la table dans SQL.
Vous ne pouvez pas publier de données dans les tables dotées d'un champ d'identifiant unique géré par l'utilisateur.
Pour plus d'informations, reportez-vous à la rubrique Définition d'un identifiant d'objet (ObjectID).
Mise à jour de données ST_Geometry avec SQL
Les mises à jour SQL sur les enregistrements existants affectent souvent les attributs non spatiaux stockés dans la table. Toutefois, vous pouvez modifier les données dans la colonne ST_Geometry avec les fonctions constructeur à l'intérieur des instructions SQL UPDATE.
Si les données sont stockées dans une géodatabase, vous devez suivre d'autres directives lors de la mise à jour avec SQL :
- N'actualisez pas les enregistrements à l'aide de SQL si les données sont versionnées, à moins que vous n'utilisiez SQL en association avec une vue versionnée.
- Ne modifiez pas les attributs qui affectent d'autres objets dans la base de données participant au comportement de la géodatabase, tels que les classes de relations, les annotations liées aux entités, la topologie ou les réseaux.
L'utilisation de SQL pour accéder à la géodatabase annule des fonctionnalités de géodatabase, telles que le versionnement, la topologie, les réseaux, les MNT, les annotations liées aux entités, ainsi que d'autres extensions d'espace de travail ou de classe. Il peut s'avérer possible d'utiliser des fonctions de SGBD, telles que les déclencheurs et les procédures stockées, afin de conserver les relations entre les tables nécessaires à certaines fonctionnalités de géodatabase. Cependant, le fait d'exécuter des commandes SQL sur la géodatabase sans tenir compte de ces fonctionnalités supplémentaires (il peut s'agir, par exemple, de l'exécution d'instructions INSERT pour ajouter des enregistrements à une table métier versionnée ou de l'ajout d'une colonne à une classe d'entités existante) annulera les fonctionnalités de géodatabase et pourra éventuellement altérer les relations entre les données de votre géodatabase.