5.5 JSONドキュメントのシステム変更番号(SCN)の使用
システム変更番号(SCN)は、内部の論理的なデータベース・タイムスタンプです。メタデータ・フィールドasof
は、データベースからドキュメントが取得された時点のSCNを記録します。SCNを使用すると、他のデータの読取り時の一貫性を確保できます。
SCNは、トランザクションのACID (原子性、一貫性、分離および永続性)プロパティに準拠する必要があるデータベース内で発生するイベントを順序付けます。
例5-20 ドキュメントのフェッチ時に記録されたSCNの取得
この例では、レースの二面性ビューrace_dv
から、_id
値201で識別されたレース・ドキュメントのシリアライズした表現をフェッチします。脚注1 SCNはフィールドasof
の値であり、これはフィールド_metadata
の値であるオブジェクト内にあります。ドキュメントがフェッチされた時点を記録します。
SELECT json_serialize(DATA PRETTY) FROM race_dv rdv
WHERE rdv.DATA."_id" = 201;
結果:
JSON_SERIALIZE(DATAPRETTY)
--------------------------
{"_id" : 201,
"_metadata" :
{
"etag" : "F6906A8F7A131C127FAEF32CA43AF97A",
"asof" : "00000000000C4175"
},
"name" : "Blue Air Bahrain Grand Prix",
"laps" : 57,
"date" : "2022-03-20T00:00:00",
"podium" : {...},
"result" : [ {...} ]
}
1 row selected.
例5-21 別のレース・ドキュメントが取得された時点でのレース・ドキュメントの取得
この例では、レース・ドキュメント201のSCNに対応する状態で、raceId
値203で識別されたレース・ドキュメントをフェッチします(例5-20を参照)。
SELECT json_serialize(DATA PRETTY) FROM race_dv
AS OF SCN to_number('00000000000C4175', 'XXXXXXXXXXXXXXXX')
WHERE json_value(DATA, '$._id') = 203;
結果:
JSON_SERIALIZE(DATAPRETTY)
--------------------------
{"_id" : 203,
"_metadata" :
{
"etag" : "EA6E1194C012970CA07116EE1EF167E8",
"asof" : "00000000000C4175"
},
"name" : "Australian Grand Prix",
"laps" : 58,
"date" : "2022-04-09T00:00:00",
"podium" : {...},
"result" : [ {...} ]
}
1 row selected.
関連トピック
関連項目:
-
『Oracle Database概要』のシステム変更番号
-
『Oracle Database概要』のトランザクションの概要
親トピック: JSONリレーショナル二面性ビューの使用
脚注一覧
脚注1: この例では、SQLの単純なドット表記法を使用します。_id
がSQL/JSONパス式にありません。そのため、それを二重引用符文字("
)で囲む必要があります。これは、それがアンダースコア文字(_
)であるためです。