この例では、入れ子オブジェクトを含む小さなJSONドキュメントを作成し、それをCLOBデータ型としてデータベース テーブルに挿入し、さらにTD_JSONSHREDおよび簡素化されたドット表記法を使用することで入れ子オブジェクトと入れ子を解かれたオブジェクトからデータを抽出します。JSONドキュメントはCLOBオブジェクトとして作成されますが、抽出されたデータはVARCHARデータとして返されます。
CREATE TABLE jsonTableClob (id INTEGER, j CLOB);
INSERT jsonTableClob (1,
'{ "items" : [ { "a" : 1,
"b" : [ 1, "a", 2 ],
"c" : { "c-d" : [],
"c-e" : {},
"c-f" : 123
}
},
{ "a" : 2,
"b" : [ 2, "b", 232 ],
"c" : { "c-d" : [0, 1],
"c-e" : {"c-e-y":"z"},
"c-f" : 234
}
},
{}
]
}' );
SELECT * FROM TD_JSONSHRED(
ON (SELECT id, j FROM jsonTableClob)
USING
ROWEXPR('items')
COLEXPR('a','b','c','c.c-d','c.c-e','c.c-e.c-e-y','c.c-f')
RETURNTYPES('VARCHAR(5)','VARCHAR(15)','VARCHAR(45)','VARCHAR(10)',
'VARCHAR(15)','VARCHAR(5)','VARCHAR(5)')
) dt;
以下の返された結果セットでは、列cとして抽出および表示されるデータに、JSONオブジェクト"items" : "c"内で入れ子になっているすべてのオブジェクトが含まれていることに注意してください。これらの入れ子オブジェクトは、さらに分割され、COLEXPRのドット表記法(c.c-d、c.c-e、c.c-e-y、c.c-f)を使用してc-d、c-e、c-e-y、c-f各列に個別に表示され、入れ子のオブジェクトを特定しています。このドキュメント内の最後のJSONオブジェクトは空なので、派生テーブルの最後の行にはJSONデータ列の値が含まれていません。
元のJSONドキュメントはCLOBとして格納されていましたが、データはVARCHAR列に細分化されます。
id a b c c-d c-e c-e-y c-f
----------- ----- --------------- --------------------------------------------- ---------- --------------- ----- -----
1 1 [1,"a",2] {"c-d":[],"c-e":{},"c-f":123} [] {} ? 123
1 2 [2,"b",232] {"c-d":[0,1],"c-e":{"c-e-y":"z"},"c-f":234} [0,1] {"c-e-y":"z"} z 234
1 ? ? ? ? ? ? ?