例: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;
5/25/2014