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;