Ejemplo: Devolver una lista de clases de relación
Todas las definiciones de elementos se guardan en la columna de definición de la tabla GDB_Items. Para identificar los elementos que son clases de relación, debe restringir la búsqueda e incluir solo los elementos que son de tipo clase de relación. La información que identifica un elemento como clase de relación está guardada en la columna de nombre de la tabla GDB_ItemTypes. Puede unir las dos tablas usando la columna tipo de la tabla GDB_Items (o la vista GDB_Items_vw en Oracle) y la columna UUID de la tabla GDB_ItemTypes, y a continuación consultar las clases de relación en la tabla GDB_ItemTypes.
Los siguientes ejemplos consultan el nombre de la clase de relación y, si corresponde, el dataset de entidades en el que está y los nombres de las dos tablas o clases de entidad que forman parte de la clase de relación. Es posible que al consultar la geodatabase, también se devuelvan anotaciones vinculadas a entidades. Esto se debe a que la anotación vinculada a entidad es un tipo de clase de relación.
--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';
Estas consultas devuelven listas de la clase de relación y las clases de origen y destino que forman parte de la clase de relación.
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
Los resultados indican que la geodatabase contiene lo siguiente:
- Una clase de relación independiente llamada speciesrel de la cual forman parte la clase de entidad habitat y la tabla sptable.
- Una clase de anotación vinculada a entidad dentro del dataset de entidad water, de la que forman parte las clases de entidad mains y mdiam.
- La clase de relación rowgrantrel, que está dentro del dataset de entidad roads, y que está formado por las tablas row y rowgrantors.