方法

エンタープライズ ジオデータベース (Oracle のバージョン対応ビュー) の Global ID (GUID) 列に、SQL を使用して値を挿入する

Last Published: November 11, 2020

サマリー

下記の手順は、エンタープライズ ジオデータベースのバージョン対応ビューの、Global ID または GUID (Globally Unique Identifier) 列に、Oracle 用 SQL (Structured Query Language) を使用して値を挿入する方法を示しています。

手順

Global ID と GUID データ タイプは、中括弧 ({}) で囲まれた 36 文字のレジストリ形式の文字列を格納します。 これらの文字列によって、ジオデータベース内およびジオデータベース間のフィーチャまたはテーブル行を一意に識別できます。 一方向と双方向のジオデータベース レプリケーションでは、フィーチャがこのようにして追跡され、リレーションシップや GUID が必要なアプリケーションに使用されます。

リレーションシップでは、Global ID フィールドが関連元キーの場合、GUID フィールドは関連先のキーでなければなりません。 ArcCatalog を右クリックして [Global ID の追加] をクリックし、ArcCatalog のフィーチャクラスに Global ID を追加します。 これらの値はジオデータベースによって自動的に管理されます。 ArcCatalog で GUID フィールドを作成し、その値を管理します。

Global ID 列を含むバージョン対応ビューに行を挿入するとき、SQL を使用すると、Global ID 列に一意の GUID 値が入力されます。

注意: Global ID、GUID、およびジオデータベース レプリケーションに関する詳細は、ArcGIS Desktop ヘルプの関連情報セクションをご参照ください。
ここで示す例は Oracle に固有の内容ですが、サポートされている他のデータベースでも手順は同様です。
  1. SDE ユーザーとしてログインしている状態で、以下の SQL を実行して、GUID を生成する関数をリレーショナル データベース管理システム (RDBMS) に作成します。

    この関数は、Oracle の SYS_GUID 関数を使用して GUID を作成し、結果を Microsoft の非圧縮または標準 GUID 形式に変換します。
CREATE OR REPLACE FUNCTION GDB_GUID RETURN NCHAR IS guid NCHAR (38); BEGIN guid := upper(RAWTOHEX(SYS_GUID())); RETURN '{'||substr(guid,1,8)||'-'||substr(guid,9,4)||'-'||substr(guid,13,4)||'-'||substr(guid,17,4)||'-'||substr(guid,21,12)||'}'; END; /
  1. SDE 以外のユーザーとしてログインしているときに、SDE ユーザーとしてその関数を実行する権限を付与します。
grant execute on gdb_guid to public;
  1. バージョン対応ビューを作成します。
"geodatabase administrator" table -o create_mv_view -T parcels_v -t parcels -i <port> -u <user> -p <password>
注意: エンタープライズ ジオデータベースでのバージョン対応ビューの作成と使用については、ArcGIS Desktop ヘルプをご参照ください。
  1. ビューの作成元のバージョン対応フィーチャクラスの REGISTRATION_ID を検索します。
select registration_id,table_name from sde.table_registry where table_name='PARCELS'; REGISTRATION_ID TABLE_NAME --------------- --------------------- 113 PARCELS
  1. Spatial ジオメトリ タイプについて、ビューの作成元のバージョン対応フィーチャクラスの空間参照 ID (SRID) を検索します。
select srid from sde.st_geometry_columns where table_name='PARCELS' and owner='USER1'; SRID ---------- 7
  1. 新しいバージョンを作成してバージョン対応ビューを編集します。 既存のバージョンを使用している場合は、このステップをスキップして次のステップに進みます。

    ArcGIS の編集セッションでのバージョン対応データの編集とは異なり、これらの編集内容を使用して内部でバージョンのリコンサイルが実行されることはありません。 そのため、デフォルト バージョンまたは他のユーザーが同時に編集またはリコンサイルする可能性のあるバージョンの編集に、バージョン対応ビューを使用しないことを強くお勧めします。 代わりに、バージョン対応ビューで、編集専用のバージョンを作成します。

    新しいバージョンの作成方法
    --新しいバージョンを作成。 variable mvvers nvarchar2(97); exec :mvvers := 'PARCELS_42'; exec sde.version_user_ddl.create_version('SDE.DEFAULT',:mvvers,sde.version_util.C_take_name_as_given,sde.version_util.C_version_public,'Parcels WorkOrder 42 Version');
  2. バージョン対応登録されたテーブルの所有者として、バージョン対応ビューにレコードを挿入します。
注意: エンタープライズ ジオデータベースでのバージョン対応ビューの編集については、ArcGIS Desktop ヘルプをご参照ください。
以下の例の説明は次のとおりです。
「USER1」は、バージョン対応登録テーブルの所有者で、「113」は上記の手順 4 で検出された registration_id です。

Spatial ジオメトリ タイプの場合、空間列の値は、挿入されるジオメトリのタイプと挿入されるポイントによって異なります。 「7」は上記の手順 5 で検出されたバージョン対応登録テーブルの SRID です。
注意: エンタープライズ ジオデータベースの ST_GEOMETRY タイプとジオメトリの挿入については、ArcGIS Desktop ヘルプをご参照ください。
--編集するバージョンを設定。 exec sde.version_util.set_current_version('USER1.PARCELS_42'); --編集セッションを開始。 exec sde.version_user_ddl.edit_version('USER1.PARCELS_42',1); --目的の挿入を実行。 --空間ジオメトリ タイプの場合、シェープを挿入可能。 insert into parcels_v (objectid,globalid,shape) values (sde.version_user_ddl.next_row_id('USER1',113),sde.GDB_GUID,(sde.st_polygon ('polygon ((10000 520000, 100008889 55000, 1045545983 234280934, 10000 520000))',7))); --非空間ジオメトリ タイプ (Binary、LOB など) の場合、NULL シェープの挿入が必要: insert into parcels_v (objectid,globalid,shape) values (sde.version_user_ddl.next_row_id('USER1',113),sde.GDB_GUID, NULL); --編集セッションを停止。 exec sde.version_user_ddl.edit_version('USER1.PARCELS_42',2); --編集をコミット。 commit;

記事 ID:000009340

ArcGIS の専門家からヘルプを受ける

テクニカル サポートへのお問い合わせ

Esri Support アプリのダウンロード

ダウンロード オプションに移動

関連情報

このトピックについてさらに調べる