例:SQL を使用したドメイン コードの説明の値の解決

XML 列の検索」の中には、コード値ドメインから結果セットとしてコードと説明の組を抽出する方法の例があります。この機能を実用的に応用すると、単純なスキーマの調査だけでなく、データセットからのコードを解決することができます。

多くの場合、コード値ドメインのコードは任意に割り当てられます。たとえば、パイプ材のコード値ドメインでは、ドメインの説明の値は、銅、PVC、鉄などですが、ドメインのコードは 1、2、3 となり、ドメインを使用するテーブルに SQL クエリを実行するユーザにとってはあまり役に立ちません。

次の例は、サブクエリ内でコード値ドメインを検索し、その結果を、ドメインを使用するテーブルの検索結果と結合する方法を示しています。

最初の例では、ユーザ molly が所有する Percels テーブルのゾーン列が ZoningCodes ドメインを使用しています。パーセル テーブルは、ZoningCodes コード値ドメインと結合され、ドメインのコードと説明のリストが返されています。

--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

この例では、distribmains テーブルの material 列が material ドメインを使用しています。distribmains テーブルは、material コード値ドメインと結合され、ドメインのコードと説明のリストが返されています。

--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;


7/10/2012