接下来介绍一下,具体如何使用SQL操作Geodatabase。
1. 先介绍一下如何使用SQL编辑FeatureClass。
可以使用非版本和版本两种方式来编辑FeatureClass,使用SQL是支持这两种编辑方式,编辑的FeatureClass对象只能是简单对象,如点,线,面,不能包含空间数据的行为,如网络,拓扑等。
对于非版本编辑,编辑后的数据会直接应用到B表中,比较容易一些。编辑非版本的FeatureClass主要需要一个方面,就是OBJECTID如何来获得,如何让OBJECTID和Desktop等ESRIClient软件统一起来,ESRI已经给我们提供了相应的存储过程来解决这个问题,以下是Oracle和SQLSERVER的例子:
//Oracle
SQL> SELECT registration_id FROM sde.table_registry
WHERE owner = ‘TOMB’ AND table_name = ‘PARCELS’;
SQL> SELECT sde.version_user_ddl.next_row_id(‘TOMB’, 114)
FROM dual;
//SQL*Server
SELECT registration_id FROM sde.sde_table_registry
WHERE owner = ‘TOMB’ AND table_name = ‘PARCELS’
DECLARE @id AS INTEGER
DECLARE @num_ids AS INTEGER
exec sde.i114_get_ids 2, 1, @id OUTPUT, @num_ids OUTPUT
2. 使用SQL编辑版本的FeatureClass。
对于版本编辑必须按照ESRI定义的流程进行操作,否则会造成一些不可逆转的错误,以下以DB2数据库为例子介绍整个流程。
A. 使用sdetable命令为要进行编辑的FeatureClass创建一个多版本视图,具体语法如下:
sdetable –o create_mv_view –T <view_name> -t <table_name>
[-i <service>] [-s <server_name>] [-D <database>]
–u <DB_User_name> [-p <DB_User_password>] [-N] [-q]
sdetable –o create_mv_view –T parcels_mv –t parcels –i 5151
–s sde –u sde -N
B. 创建一个新的版本:
db2 CALL sde.create_version ('SDE.DEFAULT', ‘versionname', 1, 1, 'multiversioned view edit test1 version', ?, ?)
C. 设定当前要编辑的版本:
db2 CALL sde.set_current_version(‘versionname’,?,?)
D. 开始编辑
db2 CALL sde.edit_version(’versionname’,1,?,?)
E. 开始使用SQL进行先关的编辑
db2 Insert into test values (…………)
Commit;
db2 Delete from test where ……
Savepoint a;
db2 Update test set shape=…….
Rollback to a;
…………………………………
db2 CALL sde.edit_version(’versionname’,2,?,?)
G. 利用ArcGIS前软处理软件(Desktop或者ArcEngine接口)调和并且将数据合并到相应的父版本中。
H. 删除版本
db2 CALL sde.delete_version(’versionname’,?,?)
I. 使用sdeversion命令进行压缩:
sdeversion –o compress
sdetable -o delete_mv_view -t <table_name>
[-i <service>] [-s <server_name>] [-D <database>]
[-u <DB_User_name>] [-p <DB_User_password>] [-N] [-q]
sdetable –o delete_mv_view –t parcels –i 5151
–s sde –u sde –N
至此整个流程全部介绍完毕。另外使用SQL操作多版本的FeatureClass需要注意以下几方面的问题:
A. 创建多版本视图之前必须先将相应的FeatureClass注册版本。
B. 添加记录的时候不需要自己计算相应的OBJECTID,后台的存储过程会自动计算的。
C. 不要用SQL来更新已有记录的ID。
D. 尽量不要在Default版本下作编辑。
最后介绍一下使用SQL操作栅格数据:
A. 先安装ST_RASTER存储类型,至于如何安装已经在前面介绍过了。
B. 安装完后可以使用下面的命令来确定是否安装成功了。
如果安装成功:
如果没有安装成功:
C. 创建一张包含ST_RASTER列的表
D. 初始化Raster列
E. 将影像插入到该表中
F. 如果想在Desktop软件能够显示和处理,需要使用ArcCatalog或者ArcEngine将其注册成geodatabase.
至此高效的使用空间SQL操作空间数据库系列全部介绍完毕。