DB2 のバージョン非対応ジオデータベース データの SQL による編集

ジオデータベースのバージョン非対応テーブルのデータがジオデータベースの振舞いに関与しない場合、そのデータに対して SQL による更新、挿入、削除操作を実行できます。SQL を使用して編集できないデータ タイプとジオデータベースの振舞いについては、「SQL を使用して編集可能なデータの種類」をご参照ください。

ジオデータベースに登録されたデータはすべて、システムによって保守される null でない一意の object ID(行 ID)列を持ちます。SQL を使用してジオデータベースのバージョン非対応テーブルにレコードを挿入するときは、object ID 用の一意な値を設定する必要があります。

ヒントヒント:
データがバージョン対応登録されている場合は、マルチバージョン対応ビューを使用してデータを編集する必要があります。その方法については、「マルチバージョン対応ビューと SQL による DB2 のバージョン対応データの編集」をご参照ください。

ここでは 1 行ずつ更新する方法について説明します。通常は、object ID を取得してデータを更新するルーチンまたはクライアント プログラムを作成することになります。

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

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

  2. TABLE_REGISTRY テーブルをクエリして、行を挿入するテーブルの登録 ID と所有者を取得します。

    この例では、factories テーブルの登録 ID と所有者名が返されます。

    SELECT REGISTRATION_ID,OWNER,TABLE_NAME
    FROM SDE.TABLE_REGISTRY
    WHERE TABLE_NAME = 'FACTORIES';
    
    REGISTRATION_ID   OWNER     TABLE_NAME
         5             gis       factories
  3. next_row_id プロシージャを呼び出すために、DB2 クライアント アプリケーションにログインするか、SQL PL ルーチンを実行します。
  4. 先の SELECT ステートメントで返された登録 ID と所有者名(5 と gis)を使用して next_row_id ルーチンを呼び出して、次の使用可能な行 ID を取得します。このルーチンは sde ユーザのスキーマに格納されています。

    この例では、GIS がテーブル所有者、5 がテーブルの登録 ID で、3 つの疑問符(?)は返される 3 つのパラメータ(ROWID、MSGCODE、MESSAGE)を示しています。

    CALL SDE.next_row_id('GIS',5,?,?,?)
    Value of output parameters
    
    Parameter Name : O_ROWID
    Parameter Value : 18
    
    Parameter Name : O_MSGCODE
    Parameter Value : 0
    
    Parameter Name : O_MESSAGE
    Parameter Value : Procedure successfully
    completed.
    
    Return Status = 1
  5. SQL インタフェースに戻り、テーブルにレコードを挿入します。
    INSERT INTO FACTORIES
    (OBJECTID,NAME,SHAPE)
    VALUES(
    18,
    'megafactory',
    db2gse.ST_PolyFromText('POLYGON( ( 50 31, 54 31, 54 29, 50 29, 50 31) )',
    db2gse.coordref()..srid(101))
    );

関連項目


3/6/2012