Next_RowID

Définition

La fonction Next_Row ID utilise une table enregistrée avec la géodatabase comme paramètre en entrée et renvoie la prochaine valeur du champ ObjectID (RowID).

Vous pouvez utiliser cette valeur lorsque vous insérez une ligne dans la table en utilisant le langage SQL.

Une erreur est renvoyée si la table que vous spécifiez n'est pas enregistrée avec la géodatabase.

Syntaxe

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

Dans la plupart des géodatabases, la structure de l'administrateur de géodatabase est la structure sde. Cependant, dans les géodatabases de structure dbo de SQL Server la structure est dbo et dans les géodatabases de structure utilisateur Oracle, la structure est le nom de la structure utilisateur.

Type de retour

Entier

Exemples

Vous trouverez ci-dessous des exemples d'utilisation de la fonction Next_RowID dans chaque type de base de données pris en charge.

Le premier exemple insère un enregistrement dans la table applicants détenue par webman et appelle la procédure Next_RowID pour insérer une valeur dans le champ RowID (ObjectID). Dans DB2 et SQL Server, vous devez d'abord appeler la procédure Next_RowID pour obtenir une valeur pour le champ ObjectID, puis utiliser cette valeur dans l'instruction d'insertion.

Le second exemple tente d'insérer un enregistrement dans la table logins en appelant la procédure Next_RowID pour insérer une valeur dans un champ nommé ID. Toutefois, la table logins n'est pas enregistrée avec la géodatabase ; par conséquent, une erreur est renvoyée.

DB2

Dans DB2, les procédures stockées ne peuvent pas être utilisées directement dans une instruction d'insertion. Par conséquent, vous devez appeler la procédure Next_RowID pour obtenir la prochaine valeur du champ RowID, puis utiliser cette valeur dans l'instruction d'insertion.

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

Dans cet exemple, la table n'est pas enregistrée avec la géodatabase ; par conséquent, aucune valeur ID n'est renvoyée :

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

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

Lorsque vous utilisez la procédure stockée Next_RowID dans SQL Server, vous devez obtenir la prochaine valeur du champ RowID, puis insérer cette valeur lors de l'insertion d'un enregistrement dans la table.

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 vous tentez d'exécuter la procédure Next_RowID pour une table qui n'est pas enregistrée avec la géodatabase, vous recevez un message d'erreur, comme illustré dans l'exemple suivant :

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.
9/12/2013