工作流:使用 SQL 创建表并将表注册到地理数据库
本主题仅适用于 ArcGIS for Desktop Standard 和 ArcGIS for Desktop Advanced。
您可使用 SQL 创建表文件。如果表中包含空间列,其会被视为一个空间表。而且,也可使用 SQL 语句向非空间表和空间表中填充数据。之后,为了使用 ArcGIS 和地理数据库功能,还可将表注册到地理数据库。
如果要使用自定义应用程序创建空间表或非空间表,或者从其他机构或承建商处接收数据库表,而且还想要充分利用地理数据库和 ArcGIS 的功能,则可能需要执行上述操作。
使用 SQL 创建非空间表
步骤:
- 打开 SQL 客户端,以具有数据库中创建表权限的用户身份登录到数据库。
- 使用 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 语句向 patients 表中添加记录。
步骤:
- 向 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 语句创建包含空间列的表。
步骤:
- 创建表 outbreaks,该表包含整型的 OID 列、整型的 dwel_id 列、字符串型的 address 列、整型的 city_code 和 ST_Geometry loc 列:
Oracle
CREATE TABLE outbreaks (OID integer NOT NULL, address nvarchar2(120), city_code integer, loc sde.st_geometry);
PostgreSQL
CREATE TABLE outbreaks (OID integer NOT NULL UNIQUE, address varchar(120), city_code integer, loc sde.st_geometry);
DB2
CREATE TABLE outbreaks (OID integer NOT NULL, address nvarchar2(120), city_code integer, loc st_geometry);
Informix
CREATE TABLE outbreaks (OID integer NOT NULL UNIQUE, address varchar(120), city_code integer, loc st_geometry);
使用 SQL 向空间表中添加数据
向 outbreaks 表中插入三条记录。
注:
这些示例语句中的 0 表示 SRID。您将指定其他数字。
步骤:
- 使用 INSERT SQL 语句和 ST_Point 函数向 outbreaks 表中添加记录:
Oracle
INSERT INTO OUTBREAKS (OID, address, city_code, loc) VALUES (1, '1420 kirchestrasse', 43, sde.st_geometry (0.00003, 0.00051, null, null, 4326) ); INSERT INTO OUTBREAKS (OID, address, city_code, loc) VALUES (2, '638 villa arbol', 10, sde.st_geometry (0.00020, -0.00029, null, null, 4326) ); INSERT INTO OUTBREAKS (OID, address, city_code, loc) VALUES (3, '5579 riverview dr', 96, sde.st_geometry (-0.00048, -0.00009, null, null, 4326) );
PostgreSQL
INSERT INTO outbreaks (OID, address, city_code, loc) VALUES (1, '1420 kirchestrasse', 43, sde.st_point (0.00003, 0.00051, null, null, 4326) ); INSERT INTO outbreaks (OID, address, city_code, loc) VALUES (2, '638 villa arbol', 10, sde.st_point (0.00020, -0.00029, null, null, 4326) ); INSERT INTO outbreaks (OID, address, city_code, loc) VALUES (3, '5579 riverview dr', 96, sde.st_point (-0.00048, -0.00009, null, null, 4326) );
DB2
INSERT INTO OUTBREAKS (OID, address, city_code, loc) VALUES (1, '1420 kirchestrasse', 43, st_point (0.00003, 0.00051, null, null, 0) ); INSERT INTO OUTBREAKS (OID, address, city_code, loc) VALUES (2, '638 villa arbol', 10, st_point (0.00020, -0.00029, null, null, 0) ); INSERT INTO OUTBREAKS (OID, address, city_code, loc) VALUES (3, '5579 riverview dr', 96, st_point (-0.00048, -0.00009, null, null, 0) );
Informix
INSERT INTO outbreaks (OID, address, city_code, loc) VALUES (1, '1420 kirchestrasse', 43, st_point (0.00003, 0.00051, null, null, 0) ); INSERT INTO outbreaks (OID, address, city_code, loc) VALUES (2, '638 villa arbol', 10, st_point (0.00020, -0.00029, null, null, 0) ); INSERT INTO outbreaks (OID, address, city_code, loc) VALUES (3, '5579 riverview dr', 96, st_point (-0.00048, -0.00009, null, null, 0) );
将表注册到地理数据库
可使用 ArcGIS for Desktop 将表注册到地理数据库。
下面一组步骤介绍了如何在 ArcGIS for Desktop 中注册到地理数据库:
步骤:
- 启动 ArcMap 并打开 Catalog 窗口,或启动 ArcCatalog。
-
连接到包含要注册的表的企业级地理数据库。
此连接在目录树的“数据库连接”节点下进行。请确保以表所有者的身份进行连接。
- 右键单击 patients 表,然后单击注册到地理数据库。
- 右键单击 outbreaks 表,然后单击注册到地理数据库。
PID 字段被定义为非空整型列,因此被用作所注册表的 ObjectID。
为所插入的字段定义了空间参考并且只插入了一种实体类型(点),因此 ArcGIS 会根据注册进行检测并使用该信息来定义要素类。OID 字段被定义为非空整型列,因此被用作所注册要素类的 ObjectID。
11/19/2012