工作流:使用 SQL 创建表并将表注册到 ArcSDE 和地理数据库

此主题仅适用于 ArcEditor 和 ArcInfo。

复杂程度: 中级 数据要求: 使用自备的数据 目标: 使用 SQL 创建空间表和非空间表,然后将表注册到 ArcSDE,再注册到地理数据库。

可使用 SQL 来创建表。如果表包含空间列,其将被视为空间表。可使用 SQL 用数据来填充非空间表和空间表。然后,为了使用 ArcSDE 和地理数据库功能,可将表注册到 ArcSDE 和地理数据库。

如果要使用自定义应用程序创建空间表或非空间表,或者从其他机构或承包商接收数据库表,但想要利用地理数据库和 ArcGIS 功能,则可能会执行上述操作。

使用 SQL 创建非空间表

步骤:
  1. 打开 SQL 客户端,以具有在数据库中创建表的权限的用户身份登录到数据库。
  2. 使用 CREATE TABLE SQL 语句创建非空间表 patients,该表包含具有以下名称的列:PID、f_name、l_name 和 dwel_id。

    Oracle

    CREATE TABLE patients 
    (PID integer NOT NULL, f_name nvarchar2(25), l_name nvarchar2(38), dwel_id integer);
    

    PostgreSQL

    CREATE TABLE patients 
    (PID integer NOT NULL UNIQUE, f_name varchar(25), l_name varchar(38), dwel_id integer);

    DB2

    CREATE TABLE patients 
    (PID integer NOT NULL, f_name varchar(25), l_name varchar(38), dwel_id integer);

    Informix

    CREATE TABLE patients 
    (PID integer NOT NULL, f_name varchar(25), l_name varchar(38), dwel_id integer);
    

使用 SQL 向非空间表中添加数据

使用 SQL INSERT 语句向使用 SQL 的 patients 表中添加记录。

步骤:
  1. 向 patients 表中插入四条记录。

    Oracle

    INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id)
    VALUES (1, 'wolfgang', 'bruker', 4301);
    
    INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id)
    VALUES (2, 'ida', 'pastens', 4301);
    
    INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id)
    VALUES (3, 'ricardo', 'montoya', 1001);
    
    INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id)
    VALUES (4, 'tukufu', 'endel', 9601);

    PostgreSQL

    INSERT INTO patients (PID, f_name, l_name, dwel_id)
    VALUES (1, 'wolfgang', 'bruker', 4301);
    
    INSERT INTO patients (PID, f_name, l_name, dwel_id)
    VALUES (2, 'ida', 'pastens', 4301);
    
    INSERT INTO patients (PID, f_name, l_name, dwel_id)
    VALUES (3, 'ricardo', 'montoya', 1001);
    
    INSERT INTO patients (PID, f_name, l_name, dwel_id)
    VALUES (4, 'tukufu', 'endel', 9601);

    DB2

    INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id)
    VALUES (1, 'wolfgang', 'bruker', 4301);
    
    INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id)
    VALUES (2, 'ida', 'pastens', 4301);
    
    INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id)
    VALUES (3, 'ricardo', 'montoya', 1001);
    
    INSERT INTO PATIENTS (PID, f_name, l_name, dwel_id)
    VALUES (4, 'tukufu', 'endel', 9601);

    Informix

    INSERT INTO patients (PID, f_name, l_name, dwel_id)
    VALUES (1, 'wolfgang', 'bruker', 4301);
    
    INSERT INTO patients (PID, f_name, l_name, dwel_id)
    VALUES (2, 'ida', 'pastens', 4301);
    
    INSERT INTO patients (PID, f_name, l_name, dwel_id)
    VALUES (3, 'ricardo', 'montoya', 1001);
    
    INSERT INTO patients (PID, f_name, l_name, dwel_id)
    VALUES (4, 'tukufu', 'endel', 9601);

使用 SQL 创建空间表

还可使用 CREATE TABLE 语句创建包含空间列的表。

步骤:
  1. 创建表 outbreaks,该表包含整型 OID、整型 dwel_id、字符串地址、整型 city_code 和 ST_Geometry location 列。

    Oracle

    CREATE TABLE outbreaks 
    (OID integer NOT NULL, address nvarchar2(120), city_code integer, location sde.st_geometry); 

    PostgreSQL

    CREATE TABLE outbreaks 
    (OID integer NOT NULL UNIQUE, address varchar(120), city_code integer, location sde.st_geometry); 

    DB2

    CREATE TABLE outbreaks 
    (OID integer NOT NULL, address nvarchar2(120), city_code integer, location st_geometry); 

    Informix

    CREATE TABLE outbreaks 
    (OID integer NOT NULL UNIQUE, address varchar(120), city_code integer, location st_geometry); 

使用 SQL 向空间表中添加数据

向 outbreaks 表中插入三条记录。

注注:

这些示例语句中的 0 表示 SRID。您将指定其他数字。

步骤:
  1. 使用 INSERT SQL 语句和 ST_Point 函数向 outbreaks 表中添加记录。

    Oracle

    INSERT INTO OUTBREAKS (OID, address, city_code, location)
    VALUES (1, 
    '1420 kirchestrasse', 
    43, 
    sde.st_point (0.00003, 0.00051, 0)
    );
    
    INSERT INTO OUTBREAKS (OID, address, city_code, location)
    VALUES (2, 
    '638 villa arbol', 
    10, 
    sde.st_point (0.00020, -0.00029, 0)
    );
    
    INSERT INTO OUTBREAKS (OID, address, city_code, location)
    VALUES (3, 
    '5579 riverview dr', 
    96, 
    sde.st_point (-0.00048, -0.00009, 0)
    );
    

    PostgreSQL

    INSERT INTO outbreaks (OID, address, city_code, location)
    VALUES (1, 
    '1420 kirchestrasse', 
    43, 
    sde.st_point (0.00003, 0.00051, 0)
    );
    
    INSERT INTO outbreaks (OID, address, city_code, location)
    VALUES (2, 
    '638 villa arbol', 
    10, 
    sde.st_point (0.00020, -0.00029, 0)
    );
    
    INSERT INTO outbreaks (OID, address, city_code, location)
    VALUES (3, 
    '5579 riverview dr', 
    96, 
    sde.st_point (-0.00048, -0.00009, 0)
    );

    DB2

    INSERT INTO OUTBREAKS (OID, address, city_code, location)
    VALUES (1, 
    '1420 kirchestrasse', 
    43, 
    st_point (0.00003, 0.00051, 0)
    );
    
    INSERT INTO OUTBREAKS (OID, address, city_code, location)
    VALUES (2, 
    '638 villa arbol', 
    10, 
    st_point (0.00020, -0.00029, 0)
    );
    
    INSERT INTO OUTBREAKS (OID, address, city_code, location)
    VALUES (3, 
    '5579 riverview dr', 
    96, 
    st_point (-0.00048, -0.00009, 0)
    );

    Informix

    INSERT INTO outbreaks (OID, address, city_code, location)
    VALUES (1, 
    '1420 kirchestrasse', 
    43, 
    st_point (0.00003, 0.00051, 0)
    );
    
    INSERT INTO outbreaks (OID, address, city_code, location)
    VALUES (2, 
    '638 villa arbol', 
    10, 
    st_point (0.00020, -0.00029, 0)
    );
    
    INSERT INTO outbreaks (OID, address, city_code, location)
    VALUES (3, 
    '5579 riverview dr', 
    96, 
    st_point (-0.00048, -0.00009, 0)
    );

将非空间表注册到 ArcSDE

使用 sdetable 命令将非空间表注册到 ArcSDE。注册后,该表的一条记录将添加到 TABLE_REGISTRY 系统表中。该表中每列的记录还将添加到 COLUMN_REGISTRY 系统表中。

这些示例中所示的选项表示以下内容:

步骤:
  1. 将目录更改为 SDEHOME > bin。
  2. 发出 sdetable 命令的 register 操作,将 patients 表注册到 ArcSDE。

    Oracle

    sdetable -o register -t patients -c PID -C SDE -i sde:oracle11g 
    -s server1 -u creator -p powerup

    PostgreSQL

    sdetable -o register -t patients -c PID -C SDE -i sde:postgresql:server1 
    -D postdb -s server1 -u creator -p powerup

    DB2

    sdetable -o register -t patients -c PID -C SDE -i sde:db2 
    -D db2db -s server1 -u creator -p powerup

    Informix

    sdetable -o register -t patients -c PID -C SDE -i sde:informix 
    -D idsdb -s server1 -u creator -p powerup

将空间表注册到 ArcSDE

使用 sdelayer 命令将空间表注册到 ArcSDE。注册后,该表的一条记录将添加到 LAYERS 和 TABLE_REGISTRY 系统表中。该表中每列的记录还将添加到 COLUMN_REGISTRY 系统表中,空间列的一条记录将添加到 GEOMETRY_COLUMNS 系统表中。

这些示例中所示的选项表示以下内容:

步骤:
  1. 使用 sdelayer 命令的 register 操作,将 outbreaks 表注册到 ArcSDE。

    Oracle

    sdelayer -o register -l outbreaks,location -e p -t ST_GEOMETRY -C RID,SDE
    -E -498618.389,-243045.144,498618.389,243045.144 -R 0 -i sde:oracle11g 
    -s server1 -u creator -p powerup

    PostgreSQL

    sdelayer -o register -l outbreaks,location -e p -t ST_GEOMETRY -C RID,SDE
    -E -498618.389,-243045.144,498618.389,243045.144 -R 0 -i sde:postgresql:server1 
    -s server1 -D postdb -u creator -p powerup

    DB2

    sdelayer -o register -l outbreaks,location -e p -t ST_GEOMETRY -C RID,SDE
    -E -498618.389,-243045.144,498618.389,243045.144 -R 0 -i sde:db2 -s server1 
    -D db2db -u creator -p powerup

    Informix

    sdelayer -o register -l outbreaks,location -e p -t ST_GEOMETRY -C RID,SDE
    -E -498618.389,-243045.144,498618.389,243045.144 -R 0 -i sde:informix 
    -s server1 -D idsdb -u creator -p powerup

将表和图层注册到地理数据库

可使用 ArcGIS Desktop 或 ArcObjects 将表或图层注册到地理数据库。

使用 IClassSchemaEdit3 ArcObjects 方法中的 RegisterAsObjectClass 将表或图层注册到地理数据库。有关语法和用法的信息,请参阅 ArcObjects 库参考。

下面一组步骤介绍了如何在 ArcGIS Desktop 中注册到地理数据库。

在目录树中,右键单击要注册到地理数据库的表或图层,然后单击注册到地理数据库 (Geodatabase)

步骤:
  1. 启动 ArcMap 并打开 Catalog 窗口,或启动 ArcCatalog。
  2. 连接到包含要注册的表的 ArcSDE 地理数据库。

    此连接在 Catalog 目录树的“数据库连接”节点下进行。请确保以表所有者的身份进行连接。

  3. 右键单击 patients 表。
  4. 单击注册到地理数据库
  5. 将表注册到 ArcSDE 时已将 OID 字段指定为 ObjectID,因此选择该字段用作地理数据库的 ObjectID 字段。
  6. 单击确定
  7. 右键单击 outbreaks 图层。
  8. 单击注册到地理数据库
  9. 单击确定

7/10/2012