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