Exemple : Résolution de codes de domaine en valeurs de description à l'aide de SQL
La rubrique Requêtes de colonne XML explique comment extraire des paires de valeurs de description et de code d'un domaine de valeurs précodées sous la forme d'un jeu de résultats. Outre la simple recherche d'informations structurelles, cette fonctionnalité peut aussi être mise en pratique pour résoudre les codes d'un jeu de données.
Bien souvent, les codes d'un domaine de valeurs précodées sont affectés arbitrairement ; par exemple, dans un domaine de valeurs précodées de matériaux de canalisation, les valeurs de description du domaine peuvent être cuivre, PVC et acier, mais les codes du domaine peuvent être 1, 2 et 3, donc peu explicites pour les utilisateurs qui exécutent une requête SQL dans une table qui utilise le domaine.
Les exemples suivants indiquent comment interroger un domaine de valeurs précodées dans une sous-requête, puis joindre ces résultats aux résultats d'une requête dans une table qui utilise le domaine.
Dans le premier exemple, la colonne de zonage de la table des parcelles (appartenant à l'utilisateur molly) utilise le domaine ZoningCodes. La table des parcelles est jointe au domaine de valeurs précodées ZoningCodes pour renvoyer une liste des codes et valeurs de description du domaine.
--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
Dans cet exemple, la colonne de matériaux de la table distribmains utilise le domaine material. La table distribmains est jointe au domaine de valeurs précodées des matériaux pour renvoyer une liste des codes et valeurs de description du domaine.
--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;