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;


2/28/2012