使用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/