5.2 二面性ビューからのドキュメント/データの削除
JSONドキュメントを二面性ビューから直接削除することも、二面性ビューの基礎となる表からデータを削除することもできます。例は、これらの可能性を示しています。
ノート:
特に明示的に示されていないかぎり、次のようになります。
-
ここに示す例は、決して相互に依存するものではありません。特に、それらの間には暗黙的な順序付けはありません。
-
ここでの二面性ビューを使用する例では、「二面性ビューの作成」で定義したビューを使用します。これらのビューは、
UNNEST
を使用して定義されています(例3-1、例3-3および例3-5)。 -
ここでの表を使用する例では、「カーレースの例、表」で定義した表を使用します。
1つ以上の二面性ビューのルート(上位)表である表から行を削除すると、それらのビューからその行に対応するドキュメントが削除されます。
例5-6 二面性ビューRACE_DVからのJSONドキュメントの削除 — SQLの使用
この例では、レース二面性ビューrace_dv
から_id
脚注1値202
のレース・ドキュメントを削除します。(これは、レース名がSaudi Arabian GP
のドキュメントの1つです。)
対応する行は、基礎となる表race
およびdriver_race_map
から(各表から1行)削除されます。
ただし、race_dv
定義表driver
にはNODELETE
の注釈が付けられているため、driver
表から何も削除されません(ルール5の更新を参照。)二面性ビューrace_dv
およびdriver_dv
の整形出力ドキュメントは、レース・ドキュメントの削除の影響を示しています。
SELECT json_serialize(DATA PRETTY) FROM race_dv;
SELECT json_serialize(DATA PRETTY) FROM driver_dv;
DELETE FROM race_dv dv WHERE dv.DATA."_id".numberOnly() = 202;
SELECT json_serialize(DATA PRETTY) FROM race_dv;
SELECT json_serialize(DATA PRETTY) FROM driver_dv;
削除の前後の問合せは、このレース・ドキュメントのみが削除されたことを示しています。ドライバ・ドキュメントは削除されませんでした:
{"_id" : 202,
"_metadata" : {"etag" : "7E056A845212BFDE19E0C0D0CD549EA0",
"asof" : "00000000000C20B1"},
"name" : "Saudi Arabian Grand Prix",
"laps" : 50,
"date" : "2022-03-27T00:00:00",
"podium" : {},
"result" : []}
例5-7 二面性ビューRACE_DVからのJSONドキュメントの削除 — RESTの使用
この例では、Oracle REST Data Services (ORDS)を使用して例5-6と同じことを実行します。二面性ビューの例を所有するデータベース・ユーザー(スキーマ)は、ここではユーザーJANUS
として表示されます。
curl --request GET \
--url http://localhost:8080/ords/janus/race_dv/
curl --request GET \
--url http://localhost:8080/ords/janus/driver_dv/
curl --request DELETE \
--url http://localhost:8080/ords/janus/race_dv/202
DELETE
からのレスポンス:
200 OK
{"rowsDeleted" : 1}
二面性ビューrace_dv
およびdriver_dv
のそれぞれに対してGET
リクエストを使用すると、削除の前後両方に、このレース・ドキュメントのみが削除されたことが示されています。ドライバ・ドキュメントは削除されませんでした:
{"_id" : 202,
"_metadata" : {"etag" : "7E056A845212BFDE19E0C0D0CD549EA0",
"asof" : "00000000000C20B1"},
"name" : "Saudi Arabian Grand Prix",
"laps" : 50,
"date" : "2022-03-27T00:00:00",
"podium" : {},
"result" : [],
"links" : [ {"rel" : "self",
"href" : "http://localhost:8080/ords/janus/race_dv/202"} ]} ],
ノート:
最適なパフォーマンスを得るには、Oracle REST Data Services (ORDS)を構成して、1秒のタイムアウトを指定してメタデータ・キャッシュを有効にしにます:
cache.metadata.enabled = true
cache.metadata.timeout = 1
『Oracle REST Data Servicesインストレーションおよび構成ガイド』の「REST対応SQLサービス設定の構成」を参照してください。
関連項目:
『Oracle REST Data Services開発者ガイド』のJSONリレーショナル二面性ビューのサポート
関連トピック
親トピック: JSONリレーショナル二面性ビューの使用
脚注一覧
脚注1: この例では、SQLの単純なドット表記法を使用します。_id
がSQL/JSONパス式にありません。そのため、それを二重引用符文字("
)で囲む必要があります。これは、それがアンダースコア文字(_
)であるためです。