例:SQL を使用した DB2 でのデータベース ビューの作成と ArcSDE への登録

難易度: 初級 データ要件 独自のデータを使用

SQL を使用して、ArcSDE ジオデータベースにビューを作成できます。ArcGIS でビューを検索するには、ビューを ArcSDE に登録する必要があります。

ビューを ArcSDE に登録するには、ビューの基になるテーブルに RowID 列が含まれている必要があります。ArcSDE によって使用される RowID 列は、テーブルまたはビューの行を一意に識別できるよう、NULL 以外の一意の整数列になっています。RowID 列を登録せずにビューを作成することもできますが、このようなビューは ArcGIS において機能が制限されます。これは、ArcGIS での選択およびクエリに登録済みの RowID 列が必要であるためです。

このトピックの例では、SQL を使用して IBM DB2 に作成したビューを ArcSDE に登録する方法を示します。例は次のように定義されたテーブルに基づいています。

CREATE TABLE employees(emp_id integer not null, name varchar(32), 
department smallint not null, hire_date date not null);

テーブルには、ArcSDE の RowID として使用できる NULL でない整数列(emp_id)が含まれています。ビューを ArcSDE に登録できるようにするには、この列がビューの定義に含まれている必要があります。

テーブルの権限の付与

ビューを作成しているユーザがビューの基になるテーブルの所有者でない場合、テーブルの所有者はビューの作成者に少なくともテーブルの SELECT 権限を付与する必要があります。ビューの所有者がビューの権限を他のユーザに付与する必要がある場合、テーブルの所有者はビューの所有者に、権限を他のユーザに付与する権限を付与する必要があります。

この例では、ビューの基になるテーブル(employees)はユーザ gdb が所有しています。ビューを作成しているユーザは、ユーザ rocket です。また、rocket ユーザはビューの権限を他のユーザに付与する必要があります。したがって、gdb ユーザは rocket ユーザに employees テーブルの SELECT 権限を付与し、rocket がビューの SELECT 権限を他のユーザに付与できるように WITH GRANT OPTION を指定する必要があります。

db2 => connect to testdb user gdb using gdb.dbg
   Database Connection Information
 Database server        = DB2 9.5.5
 SQL authorization ID   = GDB
 Local database alias   = TESTDB

db2 => GRANT SELECT 
ON employees 
TO USER rocket WITH GRANT OPTION;

DB20000I  The SQL command completed successfully.

ビューの作成

この例では、ユーザ rocket が employees テーブルを基にビューを作成し、部署番号が 201 のレコードのみにアクセスを制限しています。

db2 => connect to testdb user rocket using nopeeking
   Database Connection Information
 Database server        = DB2 9.5.5
 SQL authorization ID   = ROCKET
 Local database alias   = TESTDB

db2 => CREATE VIEW view_dept_201 
AS SELECT emp_id, name, department, hire_date 
FROM gdb.employees 
WHERE department = 201;

DB20000I  The SQL command completed successfully.

ビューの権限の付与

ビューの権限を特定のユーザに付与することができます。また、これらのユーザにベース テーブル(employees)へのアクセスを許可する必要はありません。この例では、ユーザ mgr200 は ビュー view_dept_201 の SELECT 権限を付与されています。

db2 => connect to testdb user rocket using nopeeking
   Database Connection Information
 Database server        = DB2 9.5.5
 SQL authorization ID   = ROCKET
 Local database alias   = TESTDB

db2 => GRANT SELECT ON view_dept_201 TO USER mgr200;
DB20000I  The SQL command completed successfully.

権限のテスト

mgr200 としてログインし、view_dept_201 のレコードを選択します。

db2 => connect to testdb user mgr200 using mgr200
   Database Connection Information
 Database server        = DB2 9.5.5
 SQL authorization ID   = MGR200
 Local database alias   = TESTDB

db2 => SELECT * FROM rocket.view_dept_201;

emp_id         name        dept      hire_date
112            LOLLI POP   201       06/30/2007
134            VAN CHIN    201       10/15/2007
150            DON GUN     201       03/01/2009

期待どおり、部署 201 の従業員のレコードだけが返されます。

ArcSDE へのビューの登録

ArcGIS クライアント アプリケーションからビューのレコードを検索または選択するには、ビューを ArcSDE に登録する必要があります。ビューを ArcSDE に登録すると、ArcSDE の TABLE_REGISTRY システム テーブルにレコードが追加されます。

ビューを登録するには、sdetable コマンドに register 操作を指定して使用します。ビューを ArcSDE に登録できるのは、ビューの所有者だけです。したがって、view_dept_201 を登録するときに、rocket ユーザの名前とパスワードを sdetable コマンドに指定する必要があります。

sdetable -o register -t rocket.view_dept_201 -c emp_id -C SDE 
-i sde:dbe -s mydb2server -D testdb -u rocket -p nopeeking

この例では、RowID(emp_id)は ArcSDE による管理として登録されます。ビューが読み取り専用の場合は、RowID をユーザ管理として登録できます。

sdetable コマンドの詳細については、『コマンド リファレンス』をご参照ください。


3/6/2012