在 Oracle 中使用 SQL 编辑非版本化的地理数据库 (geodatabase) 数据

如果数据不参与地理数据库行为,则可在地理数据库中使用 SQL 更新数据、将数据插入非版本化表或从其中删除数据。有关无法使用 SQL 编辑的数据类型和地理数据库行为类型的详细信息,请参阅可使用 SQL 编辑何种数据类型?

已注册到地理数据库的所有数据都具有由系统维护的唯一非空对象 ID(行 ID)列。在地理数据库中使用 SQL 将记录插入非版本化表时,必须为对象 ID 提供唯一的值。

使用 sde.version_user_ddl 包中的 next_row_id 函数为对象 ID 生成新的唯一值。

next_row_id 函数使用两个参数:所有者和注册 ID。所有者是拥有该表的用户的名称。注册 ID 来自 TABLE_REGISTRY ArcSDE 系统表。利用表的所有者名称和注册 ID,可创建 SQL 语句来填充对象 ID 列。

注意注意:

下一个可用对象 ID 不一定是最后所插入对象 ID 之后的下一个顺序编号。某些客户端应用程序的对象 ID 会进行批量分配,因此下一个可用对象 ID 的编号可能比最后使用的对象 ID 大许多。同样,批中任何未使用的对象 ID 会返回可用值池中,这意味着下一个可用对象 ID 值可能实际上小于最后插入的对象 ID 值。

步骤:
  1. 从 SQL 编辑器(例如 SQL*Plus)登录到数据库。

    请确保以拥有数据编辑权限的用户身份登录到数据库。

  2. 查询 TABLE_REGISTRY 系统表,确定行所插入的业务表的注册 ID。

    在此例中,要编辑的表是 STREAMS 要素类的业务表,所有者为 ENG2。

    SELECT registration_id 
    FROM sde.table_registry 
    WHERE table_name = 'STREAMS' and owner = 'ENG2';
    
    REGISTRATION_ID
    131
    

    ENG2.STREAMS 表的注册 ID 为 131。

  3. 在 INSERT 语句中包含拥有所有者名称和注册 ID 的 sde.version_user_ddl.next_row_id 函数,以将下一个可用值插入对象 ID 列中。

    在此例中,ST_Geometry 线段被插入 STREAMS 要素类。

    INSERT INTO eng2.streams (OBJECTID,NAME,SHAPE) VALUES
    (sde.version_user_ddl.next_row_id('ENG2', 131), 
    'TRANQUIL', 
    sde.ST_GEOMETRY('linestring (750 150, 750 750)', 4) 
    );
    
    
  4. 可继续编辑,如果完成编辑则将编辑内容提交到数据库。

相关主题


3/7/2012