SET句

構文

set_clause ::= path_expression "=" expression

セマンティクス

SET句は、ターゲット式と新しい値式の2つの式で構成されます。ターゲット式は、更新する項目を返します。ターゲット項目はアトミックまたは複合である可能性があり、常に複合項目(その親項目)の内部にネストされます。このような各ターゲット項目について、新しい値式が評価され、その結果によって親項目内のターゲット項目が置き換えられます。

ターゲット式からNULL項目が返される場合、ターゲット項目自体がNULL項目であるか、その祖先の1つがNULLです。前者の場合は、ターゲット項目が新しい項目で置き換えられます。後者の場合、SETは何にも処理を行いません。

新しい値式は、ゼロ以上の項目を返すことができます。空の結果が返された場合、SETは何も処理を行いません。複数の項目が返された場合、項目は新しく作成された配列の中に格納されます(これは、SELECT句が選択リスト内の複数値式を処理する方法と同じです)。そのため、実質的には、新しい値式の結果には、最大で1つの項目が含まれます。その後、この新規項目は、ターゲット・フィールドの親項目で予期されるタイプにキャストされます。このキャストは、CAST式の項で説明されているCAST式のように動作します。キャストが失敗するとエラーが発生します。それ以外の場合は、新規項目によって親項目内のターゲット項目が置き換えられます。

新しい値式は、現在のターゲット項目にバインドされている、暗黙的に宣言された変数$を参照できます。$変数を使用すると、複数の項目を返すターゲット式を使用できるようになります。前述のとおり、この場合、SET句はターゲット項目に対して繰り返され、各ターゲット項目Tについて、$変数をTにバインドし、新しい値式を計算してTを新しい値式の結果に置き換えます。

新しい値式が(予約された)キーワードNULLの場合はどうなるでしょうか。通常、NULLはJSON NULL値として解釈されます。ただし、ターゲット項目の親がレコードの場合、NULLはSQL NULLと解釈され、ターゲット・レコード・フィールドはSQL NULLに設定されます。

例: 行の更新を参照してください。