DB2 のバージョン非対応ジオデータベース データの SQL による編集
ジオデータベースのバージョン非対応テーブルのデータがジオデータベースの振舞いに関与しない場合、そのデータに対して SQL による更新、挿入、削除操作を実行できます。SQL を使用して編集できないデータ タイプとジオデータベースの振舞いについては、「SQL を使用して編集可能なデータの種類」をご参照ください。
ジオデータベースに登録されたデータはすべて、システムによって保守される null でない一意の object ID(行 ID)列を持ちます。SQL を使用してジオデータベースのバージョン非対応テーブルにレコードを挿入するときは、object ID 用の一意な値を設定する必要があります。
ヒント:
データがバージョン対応登録されている場合は、マルチバージョン対応ビューを使用してデータを編集する必要があります。その方法については、「マルチバージョン対応ビューと SQL による DB2 のバージョン対応データの編集」をご参照ください。
ここでは 1 行ずつ更新する方法について説明します。通常は、object ID を取得してデータを更新するルーチンまたはクライアント プログラムを作成することになります。
手順:
-
DB2 Call Level Interface のような SQL エディタからデータベースにログインします。
データを編集する権限を持ったユーザとしてデータベースにログインしてください。
-
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
- next_row_id プロシージャを呼び出すために、DB2 クライアント アプリケーションにログインするか、SQL PL ルーチンを実行します。
-
先の 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
-
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)) );
関連項目
7/10/2012