使用Sql插入sde是ObjectId的處理方式

xingtian發表於2024-05-23

使用ArcGIS匯入或新增資料時,objectid會自動自增,但透過sql時,則需要手動呼叫sde的函式sde.next_rowid來處理,否則可能匯入objectid的重複;

  • next_rowid的定義

Next_RowID 將註冊到地理資料庫的表作為輸入引數,並返回 ObjectID (RowID) 欄位的下一個值。
使用 SQL 將一行插入到表中時,可以使用此值。
如果您指定的表未註冊到地理資料庫,則返回錯誤

<geodatabase administrator schema>.next_rowid (<table owner>, <table name>)

在大多數地理資料庫中,地理資料庫管理員方案是 sde。但是,在 SQL Server dbo 方案地理資料庫中,則為 dbo;而在 Oracle 使用者方案地理資料庫中,則為使用者方案的名稱。

  • PostgreSQL
INSERT INTO webman.applicants (objectid, app_name, status)
VALUES
(sde.next_rowid('webman', 'applicants'), 'Roy Bean', 'active')

Query returned successfully: 1 row affected, 109 ms execution time.

INSERT INTO webman.logins (id, l_name)
VALUES 
(sde.next_rowid('WEBMAN', 'LOGINS'), 'maplebutter')

Notice: Class webman.logins not registered to the Geodatabase.
  • Oracle
INSERT INTO webman.applicants (objectid, app_name, status)
VALUES
(sde.gdb_util.next_rowid('WEBMAN', 'APPLICANTS'), 'Roy Bean', 'active');

1 row created

COMMIT;

INSERT INTO webman.logins (id, l_name)
VALUES 
(sde.gdb_util.next_rowid('WEBMAN', 'LOGINS'), 'maplebutter');


(sde.gdb_util.next_rowid('WEBMAN', 'LOGINS'), 'maplebutter');
 *
ERROR at line 3:
ORA-20220: Class WEBMAN.LOGINS not registered to the Geodatabase.

參考地址:https://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/006z000000w8000000/

相關文章