JSON MERGE句

構文

json_merge_patch_clause ::= target_expr WITH PATCH json_patch_expr
json_patch_expr ::= map_constructor | array_constructor | constant_expression | variable_reference

セマンティクス

JSON MERGE句は、RFC 7396で指定された標準に準拠しています。この句を使用すると、JSONドキュメントに対する一連の変更を1つの文で行うことができます。JSON MERGE句は、ターゲット式とパッチ式の2つの式で構成されます。

ターゲット式は、更新が必要なJSONドキュメントを指定します。指定された表の行で評価されたときに、この式はゼロ個以上の有効なJSON値を返す必要があります。それ以外の場合、JSON MERGE句は何も処理を行いません。

パッチ式は、評価時に単一の有効なJSON値を返す必要があります。このドキュメントには、ターゲットJSONドキュメントによって返される各JSON値に対して行われる更新が記述されています。評価されるパッチに、ターゲット内に存在しないJSON値が含まれている場合、パスとその関連する値が追加されます。ターゲットにパスが含まれている場合、その値はパッチ内の値に置き換えられます。パッチにNULL値のパスが含まれ、そのパスがターゲットに存在する場合、パス内のフィールドはターゲットから削除されます。更新は、RFC 7396に記述されているアルゴリズムに従って行われます。つまり、パッチ式が空の結果を返す場合、JSON MERGE句は何も処理を行いません。

パッチ式には、定数リテラル、外部変数への参照、マップまたは配列コンストラクタを指定できます。パッチ式は、UPDATE文の実行前にSQLエンジンによってパッチ式が評価されるため、表データにアクセスしないようにしてください。

JSON MERGEパッチは、他のすべての更新句(SET、ADD、PUT、REMOVE)とともに単一のUPDATE文で使用できます。

ノート:

  • パッチ式にJSONオブジェクト以外の値が含まれている場合、結果ではターゲット全体がパッチ値全体に置き換えられます。
  • パッチ式にJSONオブジェクトが含まれている場合、JSONオブジェクト全体が作成されるか(存在しない場合)、ターゲットで置換されます。
  • ターゲットに存在しないJSONパスがパッチ式に含まれている場合、パスが作成されます。
  • ターゲットには、親レベルまたはネストされたレベルのJSONオブジェクトのパス式を含めることができます。

「例: JSONデータの更新」を参照してください。