Definición
Next_RowID toma una tabla que esté registrada con la geodatabase como un parámetro de entrada y devuelve el siguiente valor para el campo ObjectID (RowID).
Puede utilizar este valor cuando inserta una fila en la tabla con SQL.
Se devuelve un error si la tabla que especifique no está registrada con la geodatabase.
Sintaxis
<geodatabase administrator schema>.next_rowid (<table owner>, <table name>)
En la mayoría de las geodatabases,el esquema del administrador de la geodatabase es sde. Sin embargo, en geodatabases de esquema dbo en SQL Server es dbo y en geodatabases de esquema de usuario en Oracle es el nombre del esquema del usuario.
Tipo de devolución
Entero
Ejemplos
Los siguientes son ejemplos del uso de la función Next_RowID en cada tipo de bases de datos compatibles.
En el primer ejemplo, se inserta un registro en la tabla aplicants que es propiedad de webman y llama el procedimiento Next_RowID para insertar un valor en el campo RowID (ObjectID). En Db2 y SQL Server, debe llamar al procedimiento Next_RowID primero para obtener un valor para el campo ObjectID y, después, utilizar ese valor en la sentencia de inserción.
En el segundo ejemplo se intenta insertar un registro en la tabla de inicios de sesión, llamando el procedimiento Next_RowID para insertar un valor en un campo denominado ID. Sin embargo, la tabla de inicios de sesión no está registrada con la geodatabase; por lo tanto, se devuelve un error.
Db2
En Db2, los procedimientos almacenados no se pueden utilizar directamente en una sentencia de inserción. Por lo tanto, debe llamar el procedimiento Next_RowID para obtener el valor para el siguiente RowID y después utilizar ese número en la sentencia de inserción.
CALL sde.next_rowid('WEBMAN', 'APPLICANTS', ?, ?, ?);
Value of output parameters
----------------------------
Parameter Name : O_ROWID
Parameter Value : 30
Parameter Name : O_MSGCODE
Parameter Value : 0
Parameter Name : O_MESSAGE
Parameter Value : Procedure successfully completed.
Return Status = 1
INSERT INTO webman.applicants (objectid, app_name, status)
VALUES
(30, 'Roy Bean', 'active')
The SQL command completed successfully
En este ejemplo, la tabla no está registrada con la geodatabase, de manera que no se devuelve un valor de ID:
CALL sde.next_rowid('WEBMAN', 'LOGINS', ?, ?, ?);
Value of output parameters
----------------------------
Parameter Name : O_ROWID Parameter Value : -
Parameter Name : O_MSGCODE Parameter Value : -20169
Parameter Name : O_MESSAGE Parameter Value : No SDE ROWID column.
Return Status = 1
Oracle 11g
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.
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.
SQL Server
Cuando se utiliza el procedimiento almacenado Next_RowID en SQL Server, debe obtener el siguiente valor de ID de fila y luego insertar ese valor cuando inserte un registro en la tabla.
DECLARE @myval int EXEC sde.next_rowid 'mgr', 'customers', @myval OUTPUT SELECT @myval "Next RowID";
Next RowID
3188
INSERT INTO webman.applicants (objectid, app_name, status) VALUES
(3188, 'Roy Bean', 'active');
Query returned successfully: 1 row affected, 109 ms execution time.
Si intenta ejecutar el procedimiento Next_RowID para una tabla que no está registrada con la geodatabase, recibirá un mensaje de error, como se muestra en el siguiente ejemplo:
DECLARE @myval int;
EXEC sde.next_rowid 'mgr', 'inventory', @myval OUTPUT;
SELECT @myval "Next RowID"
Msg 50000, Level 16, State 1, Procedure next_rowid, Line 16
Class inventory not registered to the Geodatabase.