Ejemplo: Resolver códigos de dominio para valores de descripción con SQL
Consultas de la columna XML incluye un ejemplo de cómo extraer los pares de código y descripción desde un dominio de valor codificado como un conjunto de resultados. Además de la investigación de esquemas simple, una aplicación práctica de esta capacidad es resolver los códigos de un dataset.
En muchos casos, los códigos en un dominio de valor codificado se asignan arbitrariamente; por ejemplo, en un dominio de valor codificado de materiales de tubería, los valores de descripción de dominio pueden ser Cobre, PVC y Acero, pero los códigos de dominio pueden ser 1, 2 y 3, que no son muy utilizados por los usuarios que ejecutan una consulta SQL en una tabla que utiliza el dominio.
Los siguientes ejemplos muestran cómo consultar un dominio de valor codificado en una subconsulta, y después vincular esos resultados con los resultados de la consulta de una tabla que utiliza el dominio.
En el primer ejemplo, la columna de zonificación de la tabla de parcelas (que pertenece al usuario molly) utiliza el dominio ZoningCodes. La tabla de parcelas se vincula con el dominio de valor codificado ZoningCodes para obtener una lista de las descripciones y los códigos de dominio.
--SQL Server SELECT OBJECTID AS "Object ID",Value AS "Zoning Code" FROM molly.parcels LEFT OUTER JOIN (SELECT codedValue.value('Code[1]','nvarchar(max)') AS "Code", codedValue.value('Name[1]', 'nvarchar(max)') AS "Value" FROM GDB_ITEMS AS items INNER JOIN GDB_ITEMTYPES AS itemtypes ON items.Type = itemtypes.UUID CROSS APPLY items.Definition.nodes ('/GPCodedValueDomain2/CodedValues/CodedValue') AS CodedValues(codedValue) WHERE itemtypes.Name = 'Coded Value Domain' AND items.Name = 'ZoningCodes') AS CodedValues ON molly.parcels.zoning = CodedValues.Code
En este ejemplo, la columna de materiales de la tabla distribmains utiliza el dominio material. La tabla distribmains se vincula con el dominio de valor codificado material para obtener una lista de las descripciones y los códigos de dominio.
--Oracle SELECT OBJECTID AS "Object ID", Value AS "Material" FROM DISTRIBMAINS LEFT OUTER JOIN (SELECT EXTRACTVALUE(CodedValues.COLUMN_VALUE, 'CodedValue/Code') AS Code, EXTRACTVALUE(CodedValues.COLUMN_VALUE, 'CodedValue/Name') AS Value FROM SDE.GDB_ITEMS_VW items INNER JOIN SDE.GDB_ITEMTYPES itemtypes ON items.Type = itemtypes.UUID, TABLE(XMLSEQUENCE(XMLType(Definition).Extract ('/GPCodedValueDomain2/CodedValues/CodedValue'))) CodedValues WHERE itemtypes.Name = 'Coded Value Domain' AND items.Name = 'Material') CodedValues ON DISTRIBMAINS.MATERIAL = CodedValues.Code;