Пример: Возвращение списка классов отношений

Все определения элементов сохраняются в столбце определений таблицы GDB_Items. Чтобы определить, какие из элементов являются классами отношений, необходимо ограничить условия поиска только теми элементами, которые относятся к типу классов отношений. Информация, которая определяет элемент как класс отношений, хранится в столбце name таблицы GDB_ItemTypes. Вы можете соединить два таблицы с помощью столбца type таблицы GDB_Items (или представления GDB_Items_vw в Oracle) и столбца UUID таблицы GDB_ItemTypes, затем создать запрос класса отношений из таблицы GDB_ItemTypes.

В следующих примерах используется запрос имени класса отношений и, если это возможно, класса объектов в нем, а также имен обоих таблиц или классов объектов, участвующих в классе отношений. Можно заметить, что при запросе к базе геоданных, также возвращается объектно-связанная аннотация. Это происходит потому, что объектно-связанная аннотация является особым типом класса отношений.

--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';

Эти запросы возвращают список классов отношений, а также классов-источников и классов-адресатов, которые участвуют в классе отношений.

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

Результаты показывают, что база геоданных содержит следующее:

9/11/2013