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 NULLERROR ON NULL

  • ERROR ON EMPTY (デフォルト)、IGNORE ON EMPTYNULL ON EMPTY

  • IGNORE IF ABSENT