簡體   English   中英

如何使用oracle表函數將json轉換為列和行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM