以下の文を使用して、JSON列を変更できます。
- UPDATE。UPDATE文を使用してSET句でJSON列の値を変更できます。JSONインスタンスの個別の部分ではなく、JSON列の更新のみが可能です。また、JSON列全体を参照する場合、入力形式はINSERT文と同じです。
- MERGE。MERGE文を使用して以下を行なうことができます。
- WHEN MATCHED THEN UPDATE句に基づきJSON列を変更します。
- WHEN NOT MATCHED THEN INSERT句に基づいてJSON列に値を挿入します。以下のMERGE文の句がJSON関数とメソッドでサポートされます。
- ON句を使用して、JSONインスタンスの条件を変更できます。
- USING句を使用して、JSON列値を選択できます。
Updateの例の設定
後の例で使用するテーブルを作成して、データを取り込みます。
CREATE TABLE my_table (eno INTEGER, edata JSON(100)); INSERT INTO my_table (1, NEW JSON('{"name" : "Cameron", "age" : 24}'));
例: UPDATEとSET
次の文は、edata列値を設定しテーブルを更新します。
UPDATE my_table SET edata = NEW JSON('{"name" : "Justin"}') WHERE edata.JSONExtractValue('$.name') = 'Cameron';
結果: 結果を確認するには、次を実行します: SELECT edata FROM my_table;
edata ----- {"name" : "Justin"}
例:UPDATE列の値
次の文は、edata列値を設定しテーブルを更新します。
UPDATE my_table SET edata = '{"name" : "George"}';
結果: 更新された名前を表示するには、次を実行します: SELECT edata FROM my_table;
edata ----- {"name" : "George"}
Mergeの例の設定
後の例で使用するテーブルを作成して、データを取り込みます。
CREATE TABLE my_table (eno INTEGER, edata JSON(100)); INSERT INTO my_table(1,'{"name" : "Justin", "phoneNumber" : 8584852611}'); INSERT INTO my_table(2,'{"name" : "Cameron", "phoneNumber" : 8584852612}'); CREATE TABLE my_table2 (eno INTEGER, edata JSON(100)); INSERT INTO my_table2(1,'{"age":24}'); INSERT INTO my_table2(3,'{"age":34}');
例: MERGE WHEN MATCHED THEN UPDATE
以下の例では、MERGE WHEN MATCHED THEN UPDATE句を使用する方法を示します。
MERGE INTO my_table USING (SELECT eno, edata FROM my_table2) AS S(a,b) ON eno = S.a AND CAST (edata.JSONExtractValue('$.name') AS VARCHAR(20)) = 'Justin' WHEN MATCHED THEN UPDATE SET edata = '{"name" : "Kevin", "phoneNumber" : 8584852613}';
クエリーの結果を表示するには次を実行します: SELECT * FROM my_table ORDER BY eno;
eno edata --------- 1 {"name" : "Kevin", "phoneNumber" : 8584852613} 2 {"name" : "Cameron", "phoneNumber" : 8584852612}
例: MERGE WHEN NOT MATCHED THEN INSERT
以下の例では、MERGE WHEN NOT MATCHED THEN INSERT句を使用する方法を示します。
MERGE INTO my_table USING (SELECT eno, edata FROM my_table2) AS S(a,b) ON eno = S.a AND CAST (edata.JSONExtractValue('$.name') AS VARCHAR(20)) = 'Mike' WHEN NOT MATCHED THEN INSERT (eno, edata) VALUES (S.a, NEW JSON('{"name" : "Mike", "phoneNumber" : 8584852614}'));
クエリーの結果を表示するには次を実行します: SELECT * FROM my_table ORDER BY eno;
eno edata ----------- 1 {"name" : "Kevin", "phoneNumber" : 8584852613} 2 {"name" : "Cameron", "phoneNumber" : 8584852612} 2 {"name" : "Mike", "phoneNumber" : 8584852614}