例:リレーションシップ クラスのリストの検索方法

すべてのアイテムの定義は、GDB_ITEMS テーブルの DEFINITION 列に格納されます。どのアイテムがリレーションシップ クラスであるかを特定するには、検索結果がリレーションシップ クラス タイプのアイテムだけになるように絞り込む必要があります。あるアイテムがリレーションシップ クラスであると定義する情報は、GDB_ItemTypes テーブルの NAME 列に格納されています。GDB_Items テーブル(Oracle の場合は GDB_Items_vw ビュー)の TYPE 列および GDB_ItemTypes テーブルの UUID 列を結合し、GDB_ItemTypes テーブルからリレーションシップ クラスを検索することができます。

次の例では、リレーションシップ クラス(および、該当する場合、そのリレーションシップクラスが存在するフィーチャ データセット)の名前と、リレーションシップ クラスに参加しているテーブルおよびフィーチャクラスの名前が検索されます。また、ジオデータベースを検索すると、フィーチャリンク アノテーションも返されます。これは、フィーチャリンク アノテーションもリレーションシップ クラスの 1 つのタイプであるからです。

--Queries a geodatabase in PostgreSQL
--Returns a list of relationship classes and their member tables

SELECT
 (xpath('//CatalogPath/text()', definition))::text AS "Relationship class and dataset",
 (xpath('//OriginClassNames/text()', definition))::text AS "Origin class",
 (xpath('//DestinationClassNames/text()', definition))::text AS "Destination class"
FROM 
 sde.gdb_items items INNER JOIN sde.gdb_itemtypes itemtypes
 ON items.type = itemtypes.uuid
WHERE 
 itemtypes.name = 'Relationship class';
--Queries a dbo-schema geodatabase in SQL Server
--Returns a list of relationship classes and their member tables

SELECT
	ITEMS.Definition.value('(/DERelationshipClassInfo/CatalogPath)[1]', 'nvarchar(max)') AS "Relationship Class and dataset",
 ITEMS.Definition.value('(/DERelationshipClassInfo/OriginClassNames/Name)[1]', 'nvarchar(max)') AS "Origin Class",
 ITEMS.Definition.value('(/DERelationshipClassInfo/DestinationClassNames/Name)[1]', 'nvarchar(max)') AS "Destination Class" 
FROM 
 dbo.GDB_ITEMS AS ITEMS INNER JOIN dbo.GDB_ITEMTYPES AS ITEMTYPES
 ON ITEMS.Type = ITEMTYPES.UUID
WHERE 
 ITEMTYPES.Name = 'Relationship Class';

--Queries a geodatabase in Oracle
--Returns a list of relationship classes and their member tables

SELECT
 EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/CatalogPath') AS "Relationship Class and dataset",
 EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/OriginClassNames/Name') AS "Origin Class",
 EXTRACTVALUE(XMLType(Definition), '/DERelationshipClassInfo/DestinationClassNames/Name') AS "Destination Class" 
FROM 
 sde.GDB_ITEMS_VW ITEMS INNER JOIN sde.GDB_ITEMTYPES ITEMTYPES
 ON ITEMS.Type = ITEMTYPES.UUID
WHERE 
 ITEMTYPES.Name = 'Relationship Class';

これらの検索を行うと、リレーションシップ クラス、およびリレーションシップ クラスに参加している関連元クラスと関連先クラスのリストが返されます。

Relationship class and dataset                  Origin class                 Destination class
-----------------------------------------       --------------------         -------------------------
mygdb.myuser.speciesrel		                        mygdb.myuser.habitat         mygdb.myuser.sptable
mygdb.uruser.water\\mygdb.uruser.mainanno		  mygdb.uruser.mains           mygdb.uruser.mdiam
mygdb.hisuser.roads\\rowgrantrel		          mygdb.hisuser.row            mygdb.hisuser.rowgrantors

検索結果はジオデータベースに以下のクラスが格納されていることを示しています。


3/6/2012