Las consultas de relación analizan cómo utilizar la tabla GDB_ItemRelationships para descubrir qué tablas y clases de entidad utilizan un dominio en particular para la validación. Sin embargo, es posible encontrar más información detallada, como a qué campo se aplica el dominio y qué subtipos lo utilizan (si existen subtipos). Los siguientes pasos explican resumidamente una forma de buscar esta información:
- Inserte los nombres y las definiciones de todos los elementos con relaciones a un dominio especificado en un conjunto de registros temporales.
- Extraiga los nombres de los campos de todos los elementos donde el dominio se utiliza en el nivel de la clase (/*/GPFieldInfoExs/GPFieldInfoEx/DomainName).
- Extraiga los nombres de los campos y los subtipos de todos los elementos donde el dominio se utiliza en el nivel del subtipo (/*/Subtypes/Subtype/FieldInfos/SubtypeFieldInfo/DomainName).
- Combine estos dos conjuntos de resultados.
El siguiente ejemplo realiza una consulta a una geodatabase en SQL Server para un dominio denominado Material.
--Queries an sde-schema geodatabase in SQL Server
DECLARE @DOMAIN_NAME NVARCHAR(MAX);
SET @DOMAIN_NAME = 'Material';
DECLARE @CLASS_DEFS TABLE
(
Name nvarchar(max),
Definition XML
)
--Insert records to temporary record set
INSERT INTO @CLASS_DEFS
SELECT
sde.gdb_items.Name,
sde.gdb_items.Definition
FROM
-- Get the domain item's UUID.
((SELECT GDB_ITEMS.UUID AS UUID
FROM sde.gdb_items INNER JOIN sde.gdb_itemtypes
ON sde.gdb_items.Type = sde.gdb_itemtypes.UUID
WHERE
sde.gdb_items.Name = @DOMAIN_NAME AND
sde.gdb_itemtypes.Name IN ('Coded Value Domain','Range Domain')) AS Domain
-- Find the relationships with the domain as the DestinationID.
INNER JOIN sde.gdb_itemrelationships
ON Domain.UUID = sde.gdb_itemrelationships.DestID)
-- Find the names of the origin items in the relationships.
INNER JOIN sde.gdb_items
ON Domain.UUID = sde.gdb_itemrelationships.DestID
-- Extract the field definitions.
SELECT
ClassDefs.Name AS "Class Name",
fieldDef.value('Name[1]', 'nvarchar(max)') AS "Field Name",
NULL AS "Subtype Name"
FROM
@CLASS_DEFS AS ClassDefs
CROSS APPLY
Definition.nodes('/*/GPFieldInfoExs/GPFieldInfoEx') AS FieldDefs(fieldDef)
WHERE
fieldDef.value('DomainName[1]', 'nvarchar(max)') = @DOMAIN_NAME
UNION
SELECT
ClassDefs.Name AS "Class Name",
fieldDef.value('FieldName[1]', 'nvarchar(max)') AS "Field Name",
fieldDef.value('(../../SubtypeName)[1]', 'nvarchar(max)') AS "Subtype Name"
FROM
@CLASS_DEFS AS ClassDefs
CROSS APPLY
Definition.nodes('/*/Subtypes/Subtype/FieldInfos/SubtypeFieldInfo') AS FieldDefs(fieldDef)
WHERE
fieldDef.value('DomainName[1]', 'nvarchar(max)') = @DOMAIN_NAME
Este ejemplo realiza una consulta a una geodatabase en Oracle para un dominio denominado AncillaryRoleDomain:
--Queries a geodatabase in Oracle
CREATE TABLE CLASS_DEFS
(
name varchar2(32),
definition XMLType
);
--Insert records to temporary record set
INSERT INTO CLASS_DEFS
SELECT
sde.gdb_items_vw.Name,
XMLType(sde.gdb_items_vw.Definition)
FROM(
(
-- Get the domain item's UUID.
SELECT GDB_ITEMS_VW.UUID AS UUID
FROM sde.gdb_items_vw INNER JOIN sde.gdb_itemtypes
ON sde.gdb_items_vw.Type = sde.gdb_itemtypes.UUID
WHERE sde.gdb_items_vw.Name = 'AncillaryRoleDomain' AND
sde.gdb_itemtypes.Name IN ('Coded Value Domain','Range Domain')
) Domain
-- Find the relationships with the domain as the DestinationID.
INNER JOIN sde.gdb_itemrelationships
ON Domain.UUID = sde.gdb_itemrelationships.DestID
)
-- Find the names of the origin items in the relationships.
INNER JOIN sde.gdb_items_vw
ON sde.gdb_items_vw.UUID = sde.gdb_itemrelationships.OriginID;
-- Extract the field definitions.
SELECT CLASS_DEFS.Name AS "Class Name",
EXTRACTVALUE(fields.Column_Value, '/GPFieldInfoEx/Name') AS "Field Name",
null AS "Subtype Name"
FROM CLASS_DEFS,
TABLE(XMLSEQUENCE(Extract(CLASS_DEFS.definition, '/*/GPFieldInfoExs/GPFieldInfoEx'))) fields
UNION
SELECT table_name AS "Class Name",
EXTRACTVALUE(subtypes_fields.Column_value, '/SubtypeFieldInfo/FieldName') as column_name,
subtype_name AS "Subtype Name"
FROM (
SELECT CLASS_DEFS.Name AS table_name,
subtypes.COLUMN_VALUE XMLVal,
EXTRACTVALUE(subtypes.COLUMN_VALUE, '/Subtype/SubtypeName') AS subtype_name,
EXTRACTVALUE(subtypes.COLUMN_VALUE, '/Subtype/SubtypeCode') AS subtype_value
FROM CLASS_DEFS,
TABLE(XMLSEQUENCE(Extract(CLASS_DEFS.definition, '/DEFeatureClassInfo/Subtypes/Subtype'))) subtypes
) subtypes_fields,
TABLE(XMLSEQUENCE(subtypes_fields.XMLVal.Extract('/Subtype/FieldInfos/SubtypeFieldInfo'))) subtypes_fields;
DROP TABLE CLASS_DEFS;