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