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 値より小さくなることもあります。

手順:
  1. SQL*Plus のような SQL エディタからデータベースにログインします。

    データを編集する権限を持ったユーザとしてデータベースにログインしてください。

  2. 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 です。

  3. 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) 
    );
    
    
  4. 編集を続けます。編集が完了した場合は、編集内容をデータベースにコミットします。

関連項目


3/6/2012