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;