Exemple : Renvoi d'une liste de classes de relations
Toutes les définitions d'attribut sont stockées dans la colonne de définition de la table GDB_Items. Pour savoir quels attributs sont des classes de relations, vous devez limiter votre recherche pour n'inclure que ceux dont le type est une classe de relation. Les informations qui identifient un attribut comme étant une classe de relations sont stockées dans la colonne name de la table GDB_ItemTypes. Vous pouvez joindre les deux tables à l'aide de la colonne type de la table GDB_Items (ou la vue GDB_Items_vw dans Oracle) et de la colonne UUID de la table GDB_ItemTypes, puis rechercher la classe de relations à partir de la table GDB_ItemTypes.
Les exemples suivants recherchent le nom de la classe de relations et, le cas échéant, le jeu de données d'entité dans lequel elle réside, plus le nom des tables et classes d'entités qui participent à la classe de relations. Lorsque vous interrogez la géodatabase, vous pouvez remarquer que l'annotation liée à l'entité est également renvoyée. Cela tient au fait que l'annotation liée à l'entité est un type spécial de classe de relations.
--Queries a geodatabase in PostgreSQL
--Returns a list of relationship classes and their member tables
SELECT
(xpath('//CatalogPath/text()', definition))::text AS "Relationship class and dataset",
(xpath('//OriginClassNames/text()', definition))::text AS "Origin class",
(xpath('//DestinationClassNames/text()', definition))::text AS "Destination class"
FROM
sde.gdb_items items INNER JOIN sde.gdb_itemtypes itemtypes
ON items.type = itemtypes.uuid
WHERE
itemtypes.name = 'Relationship class';
--Queries a dbo-schema geodatabase in SQL Server
--Returns a list of relationship classes and their member tables
SELECT
ITEMS.Definition.value('(/DERelationshipClassInfo/CatalogPath)[1]', 'nvarchar(max)') AS "Relationship Class and dataset",
ITEMS.Definition.value('(/DERelationshipClassInfo/OriginClassNames/Name)[1]', 'nvarchar(max)') AS "Origin Class",
ITEMS.Definition.value('(/DERelationshipClassInfo/DestinationClassNames/Name)[1]', 'nvarchar(max)') AS "Destination Class"
FROM
dbo.GDB_ITEMS AS ITEMS INNER JOIN dbo.GDB_ITEMTYPES AS ITEMTYPES
ON ITEMS.Type = ITEMTYPES.UUID
WHERE
ITEMTYPES.Name = 'Relationship Class';
--Queries a geodatabase in Oracle
--Returns a list of relationship classes and their member tables
SELECT
EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/CatalogPath') AS "Relationship Class and dataset",
EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/OriginClassNames/Name') AS "Origin Class",
EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/DestinationClassNames/Name') AS "Destination Class"
FROM
sde.GDB_ITEMS_VW ITEMS INNER JOIN sde.GDB_ITEMTYPES ITEMTYPES
ON ITEMS.Type = ITEMTYPES.UUID
WHERE
ITEMTYPES.Name = 'Relationship Class';
Ces requêtes renvoient la liste des classes de relations, ainsi que des classes d'entités d'origine et de destination qui participent à la classe de relations.
Relationship class and dataset Origin class Destination class ----------------------------------------- -------------------- ------------------------- mygdb.myuser.speciesrel mygdb.myuser.habitat mygdb.myuser.sptable mygdb.uruser.water\\mygdb.uruser.mainanno mygdb.uruser.mains mygdb.uruser.mdiam mygdb.hisuser.roads\\rowgrantrel mygdb.hisuser.row mygdb.hisuser.rowgrantors
Les résultats indiquent que la géodatabase contient les éléments suivants :
- une classe de relations autonome nommée speciesrel à laquelle la classe d'entités habitat et la table sptable participent,
- une classe d'annotations liées à des entités au sein du jeu de données d'entité water et à laquelle les classes d'entités mains et mdiam participent,
- la classe de relations rowgrantrel, qui se trouve dans le jeu de données d'entité roads et qui est composée des tables row et rowgrantors.