13.15 JSON_TRANSFORMの演算子REMOVE_SET
JSON_TRANSFORM
の演算子REMOVE_SET
は、集合から要素を削除する場合と同様に、指定された値のすべての出現を配列から削除します。
これは、RHSで指定されている値のすべての出現を、LHSのパス式で対象となっている配列から削除します。
ノート: これは集合操作であるため、操作後のすべての配列要素の順序は定義されていません。
例13-28 JSON_TRANSFORM: 集合としての配列からの要素の削除
このコードでは、要素2
を、入力配列(集合として扱われる)から削除します。
SELECT json_transform('{"a":[1,2,3]}',
REMOVE_SET '$.a' = 2)
結果:
{"a":[ 1,3 ]}
例13-29 JSON_TRANSFORM: 集合としての配列からの既存要素の削除は失敗
このコードでは、入力配列(集合として扱われる)から要素5
を削除しようとしています。その入力配列には値が5
の要素がないため、この操作は失敗します。
SELECT json_transform('{"a":[1,2,3]}',
REMOVE_SET '$.a' = 5)
次のエラーが発生します:
ORA-40766: error in JSON_TRANSFORM execution
JZN-00420: value for DELETE not found in target set
例13-30 JSON_TRANSFORM: ハンドラIGNORE ON ABSENTを使用して要素が存在しないことによるREMOVE_SETエラーを防ぐ
ここにあるコードは、json_transform
のハンドラIGNORE ON ABSENT
の使用によって、削除する要素が入力配列に存在しない場合はそれを無視するという点を除き、例13-29と同じです。
SELECT json_transform('{"a":[1,2,3]}',
REMOVE_SET '$.a' = 5 IGNORE ON ABSENT)
結果: この配列は変更されません。存在しない要素5
を削除しようとすると無視されます。
{"a":[ 1,2,3 ]}
演算子REMOVE_SET
で使用できるハンドラは次のとおりです:
-
ERROR ON MISSING
(デフォルト)、IGNORE ON MISSING
。 -
NULL ON NULL
(デフォルト)、IGNORE ON NULL
、ERROR ON NULL
-
ERROR ON EMPTY
(デフォルト)、IGNORE ON EMPTY
、NULL ON EMPTY
。 -
IGNORE IF ABSENT
。