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

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

注注:

如果要使用 SQL 编辑的非版本化表已可用于存档,则必须编辑表存档视图而不是表本身。该视图将自动更新某些 ArcGIS 维护的字段。有关详细信息,请参阅什么是存档视图及其相关主题。

已注册到地理数据库的所有数据都具有由系统维护的唯一非空 ObjectID(行 ID)字段。在地理数据库中使用 SQL 将记录插入非版本化表时,必须为 ObjectID 提供唯一的值。可以使用 Next_RowID 存储过程通过 SQL 将值插入到 ObjectID 字段。

使用 sde.gdb_util 包中的 Next_RowID 函数为 ObjectID 生成新的唯一值。

Next_RowID 函数使用两个参数:表所有者和表名。通过表所有者和表名,可以创建 SQL 语句来填充 ObjectID 字段。

注注:

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

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

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

  2. 在 INSERT 语句中包括具有所有者和表名的 sde.gdb_util.next_rowid 函数,以将下一可用值插入 ObjectID 字段。

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

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

如果该表还包含 GUID 或全局 ID 字段,则还必须为此字段提供一个唯一的值。有关详细信息,请参阅 Next_GlobalID

相关主题

5/25/2014