Oracle のバージョン非対応ジオデータベース データの SQL による編集
ジオデータベースのバージョン非対応テーブルのデータがジオデータベースの振舞いに関与しない場合、そのデータに対して SQL による更新、挿入、削除操作を実行できます。SQL を使用して編集できないデータ タイプとジオデータベースの振舞いについては、「SQL を使用して編集可能なデータの種類」をご参照ください。
ジオデータベースに登録されたデータはすべて、システムによって保守される null でない一意の object ID(行 ID)列を持ちます。SQL を使用してジオデータベースのバージョン非対応テーブルにレコードを挿入するときは、object ID 用の一意な値を設定する必要があります。
sde.version_user_ddl パッケージの next_row_id 関数を使用して、object ID 用の新しい一意の値を生成します。
next_row_id 関数は、所有者と登録 ID という 2 つのパラメータを使用します。所有者は、テーブルを所有しているユーザの名前です。登録 ID は、ArcSDE の TABLE_REGISTRY システム テーブルから取得します。テーブルの所有者名と登録 ID がわかると、object ID 列に値を設定する SQL ステートメントを作成できます。
次に使用可能な object ID は必ずしも、最後に挿入した object ID の次の連番ではありません。一部のクライアント アプリケーションではバッチ操作で object ID が割り当てられます。そのため、次に使用可能な object ID が最後に使用した object ID からいくつも離れた数字になることがあります。また、バッチで使用しなかった object ID は使用可能な値のプールに戻されます。つまり、次に使用可能な object ID 値が、実際には、最後に挿入した object ID 値より小さくなることもあります。
-
SQL*Plus のような SQL エディタからデータベースにログインします。
データを編集する権限を持ったユーザとしてデータベースにログインしてください。
-
TABLE_REGISTRY システム テーブルをクエリして、行を挿入するビジネス テーブルの登録 ID を取得します。
この例では、編集するテーブルは STREAMS フィーチャクラスのビジネス テーブルで、所有者は ENG2 です。
SELECT registration_id FROM sde.table_registry WHERE table_name = 'STREAMS' and owner = 'ENG2'; REGISTRATION_ID 131
ENG2.STREAMS テーブルの登録 ID は 131 です。
-
INSERT ステートメントで sde.version_user_ddl.next_row_id 関数に所有者名と登録 ID を指定して、次に使用可能な値を object ID 列に挿入します。
この例では、ST_Geometry 線分が STREAMS フィーチャクラスに挿入されます。
INSERT INTO eng2.streams (OBJECTID,NAME,SHAPE) VALUES (sde.version_user_ddl.next_row_id('ENG2', 131), 'TRANQUIL', sde.ST_GEOMETRY('linestring (750 150, 750 750)', 4) );
- 編集を続けます。編集が完了した場合は、編集内容をデータベースにコミットします。