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 :

9/12/2013