Beispiel: Auflösen von Domänencodes in Beschreibungswerten mit SQL
XML-Spaltenabfragen enthalten ein Beispiel zum Extrahieren von Code und Beschreibungspaaren aus einer Domäne mit codierten Werten als Ergebnissatz. Jenseits einfacher Schemauntersuchung ist eine praktische Anwendung dieser Fähigkeit das Auflösen der Codes aus einem Dataset.
In vielen Fällen werden die Codes in einer Domäne mit codierten Werten willkürlich zugewiesen. In einer Domäne mit codierten Werten von Rohrleitungsmaterialien können die Beschreibungswerte der Domäne z. B. Kupfer, PVC und Stahl sein, aber die Codes der Domäne könnten 1, 2 und 3 sein, was Benutzern wenig nützt, die eine SQL-Abfrage für eine Tabelle ausführen, in der die Domäne verwendet wird.
In den folgenden Beispielen wird gezeigt, wie eine Domäne mit codierten Werten in einer Unterabfrage abgefragt wird und diese Ergebnisse mit den Ergebnissen einer Tabellenabfrage, in der die Domäne verwendet wird, zusammengeführt werden.
Im ersten Beispiel verwendet die Spalte "Zoning" der Tabelle "Parcels" (von Besitzer "molly") die Domäne "ZoningCodes". Die Tabelle "Parcels" wird mit der ZoningCodes-Domäne mit codierten Werten verbunden, um eine Liste der Domänencodes und der Beschreibungswerte zurückzugeben.
--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
In diesem Beispiel verwendet Materialspalte der Tabelle "distribmains" die Material-Domäne. Die Tabelle "distribmains" wird mit der Material-Domäne mit codierten Werten verbunden, um eine Liste der Domänencodes und der Beschreibungen zurückzugeben.
--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;