SYS_ROW_ETAG

目的

ETAGを表データとともに使用して、SQLを使用したロックフリー行の更新を実行できます。これを実行するには、ファンクションSYS_ROW_ETAGを使用して、表行の特定の列セットの現在の状態をETAGハッシュ値として取得します。ファンクションSYS_ROW_ETAGは、etagを計算する行の列セットの値を使用して、行のetag (128ビット・ハッシュ値)を計算します。ファンクションに列の名前を任意の順序で渡すことができます。

ファンクションSYS_ROW_ETAGは、行のこれらの列の値のみを使用して、行のETAG値を計算します。他のセッションが同時に更新しないようにする、すべての列の名前を渡します。これには、現在のセッションが更新する予定の列も含まれていますが、更新操作がアプリケーションに対して論理的に依存する値を含む列も含まれています。(引数として列をSYS_ROW_ETAGに渡す順序は関係ありません。)

次の例では、NUMBER型の列c1c2およびc3を含む表fooを作成し、表に値を挿入します。次に、列c2およびc1SYS_ROW_ETAGに渡して、c2およびc1のetagを取得します:

CREATE TABLE foo (c1 NUMBER, c2 NUMBER, c3 NUMBER);

Table created.

INSERT INTO foo VALUES (1, 2, 3);

1 row created.

SELECT SYS_ROW_ETAG(c2, c1) FROM foo;

SYS_ROW_ETAG(C2,C1)
--------------------------------
3B978191AD0C828DA0E6A53EDF0B278A

---------------

関連項目:

『JSONリレーショナル二面性開発者ガイド』の例4.18ファンクションSYS_ROW_ETAGを使用した同時表更新の最適化による制御