Next_RowID
定義
Next_RowID は、ジオデータベースに登録されたテーブルを入力パラメータとして受け取り、次の ObjectID(RowID)フィールドの値を返します。
SQL を使用してテーブルに行を挿入する場合に、この値を使用できます。
指定したテーブルがジオデータベースに登録されていない場合、エラーが返されます。
構文
<geodatabase administrator schema>.next_rowid (<table owner>, <table name>)
ほとんどのジオデータベースでは、ジオデータベース管理者のスキーマは sde です。ただし、SQL Server の dbo スキーマ ジオデータベースの場合、このスキーマは dbo になり、Oracle 内のユーザ スキーマ ジオデータベースの場合、このスキーマはユーザのスキーマ名になります。
戻り値のタイプ
整数
例
以下に、サポートされるそれぞれのデータベース タイプで Next_RowID 関数を使用する例を示します。
最初の例では、WEBMAN が所有する APPLICANTS テーブルにレコードを挿入し、Next_RowID プロシージャを呼び出して RowID(ObjectID)フィールドに値を挿入しています。DB2 と SQL Server の場合、まず Next_RowID プロシージャを呼び出して ObjectID フィールドの値を取得し、その値を INSERT ステートメントで使用する必要があります。
2 つめの例では、LOGINS テーブルにレコードを挿入し、Next_RowID プロシージャを呼び出して ID という名前のフィールドに値を挿入しようとしています。しかし、LOGONS テーブルがジオデータベースに登録されていないため、エラーが返されています。
DB2
DB2 の場合、ストアド プロシージャを INSERT ステートメントで直接は使用できません。そのため、Next_RowID プロシージャを呼び出して次の RowID の値を取得していから、その値を INSERT ステートメントで使用する必要があります。
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
この例では、テーブルがジオデータベースに登録されていないため、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
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
SQL Server で Next_RowID ストアド プロシージャを使用する場合、次の行 ID の値を取得し、レコードをテーブルに挿入するときにその値を挿入する必要があります。
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.
ジオデータベースに登録されていないテーブルに対して Next_RowID プロシージャを実行しようとすると、以下の例に示すようなエラー メッセージが表示されます。
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.