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

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

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

提示提示:
如果数据已版本化,则必须使用多版本化视图进行编辑。有关如何执行此操作的信息,请参阅在 DB2 中使用多版本化视图和 SQL 编辑版本化数据

这组说明介绍每次更新一行。很可能要编写例程或客户端程序来检索对象 ID 和更新数据。

步骤:
  1. 从 SQL 编辑器(例如 DB2 Call Level Interface)登录到数据库。

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

  2. 查询 TABLE_REGISTRY 表,找到要插入行的表的注册 ID 和所有者。

    此例中,返回了 factories 表的注册 ID 和所有者名称。

    SELECT REGISTRATION_ID,OWNER,TABLE_NAME
    FROM SDE.TABLE_REGISTRY
    WHERE TABLE_NAME = 'FACTORIES';
    
    REGISTRATION_ID   OWNER     TABLE_NAME
         5             gis       factories
  3. 登录 DB2 客户端应用程序或执行 SQL PL 例程以调用 next_row_id 过程。
  4. 在调用 next_row_id 例程时使用从前一 SELECT 语句返回的注册 ID 和所有者名称(5 和 gis)以获取下一可用行 ID。此例程存储在 sde 用户的方案中。

    在此例中,GIS 为表的所有者,5 为表的注册 ID,三个问号分别表示返回的三个参数:ROWID、MSGCODE 和 MESSAGE。

    CALL SDE.next_row_id('GIS',5,?,?,?)
    Value of output parameters
    
    Parameter Name : O_ROWID
    Parameter Value : 18
    
    Parameter Name : O_MSGCODE
    Parameter Value : 0
    
    Parameter Name : O_MESSAGE
    Parameter Value : Procedure successfully
    completed.
    
    Return Status = 1
  5. 返回 SQL 界面,将记录插入表中。
    INSERT INTO FACTORIES
    (OBJECTID,NAME,SHAPE)
    VALUES(
    18,
    'megafactory',
    db2gse.ST_PolyFromText('POLYGON( ( 50 31, 54 31, 54 29, 50 29, 50 31) )',
    db2gse.coordref()..srid(101))
    );

相关主题


3/7/2012