JSON列の変更 - Teradata Database - Teradata Vantage NewSQL Engine - UPDATEおよびMERGE文を使用して、JSON列を変更できます。

Teradata Vantage™ JSONデータ型

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/bgi1512081870828.ditamap
dita:ditavalPath
ja-JP/bgi1512081870828.ditaval
dita:id
evi1472243742653
Product Category
Software
Teradata Vantage

以下の文を使用して、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}