[英]How to convert json to columns and rows using oracle table function
我有一個表結構如下:
create table json_tab (id number constraint primary key,d_data clob(30000));
insert into json_tab values (1,'[{"a"=0,"b"=1},{"a"=1,"b"=2},{"a"=2,"b"=3}]');
insert into json_tab values (2,'[{"a"=0,"b"=1},{"a"=1,"b"=2},{"a"=2,"b"=3}]');
我想編寫一個查詢來獲取以下格式的記錄。
ID | 一種 | 乙 |
---|---|---|
1 | 0 | 1 |
1 | 1 | 2 |
1 | 2 | 3 |
2 | 0 | 1 |
2 | 1 | 2 |
2 | 2 | 3 |
以上是示例數據。 實際數據是針對超過 30000 字節的 JSON 列
首先,您的 SQL 代碼不正確,無論是創建表還是 json 文檔。 這是一個更正的版本:
drop table json_tab;
create table json_tab (id number primary key,d_data clob check (d_data is json));
insert into json_tab values (1,'[{"a":0,"b":1},{"a":1,"b":2},{"a":2,"b":3}]');
insert into json_tab values (2,'[{"a":0,"b":1},{"a":1,"b":2},{"a":2,"b":3}]');
select j.id, t.a, t.b
from json_tab j, json_table (j.d_data columns (
nested path '$[*]' COLUMNS(
A NUMBER PATH '$.a',
B number path '$.b'))) t;
這是輸出:
ID A B
---------- ---------- ----------
1 0 1
1 1 2
1 2 3
2 0 1
2 1 2
2 2 3
您可以將表創建為:
create table json_tab (
id NUMBER(8,0) CONSTRAINT json_tab__id__pk PRIMARY KEY,
d_data CLOB CONSTRAINT json_tab__d_data__json CHECK (d_data IS JSON)
);
那么您的 JSON 數據應該在對象的鍵值對中使用"a":1
而不是"a"=1
:
insert into json_tab ( id, d_data )
SELECT 1,'[{"a":0,"b":1},{"a":1,"b":2},{"a":2,"b":3}]' FROM DUAL UNION ALL
SELECT 2,'[{"a":0,"b":1},{"a":1,"b":2},{"a":2,"b":3}]' FROM DUAL;
然后你可以使用JSON_TABLE
:
SELECT id,a,b
FROM json_tab t
CROSS JOIN
JSON_TABLE(
t.d_data,
'$[*]'
COLUMNS
a NUMBER(5,0) PATH '$.a',
b NUMBER(5,0) PATH '$.b'
)
哪些輸出:
\n身份證 | 一個 | 乙\n -: | -: | -:\n 1 | 0 | 1\n 1 | 1 | 2\n 1 | 2 | 3\n 2 | 0 | 1\n 2 | 1 | 2\n 2 | 2 | 3\n
db<> 在這里擺弄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.