안녕하십니까, CLOB 컮럼에 JSON으로 DATA(아래) 조회 쿼리 질문 드립니다
1. ITEM 항목 조회
예 'SALE_CD_LIST' 의 COUNT가 2인데, 각각 COUNT중 ITEMS항목의 'SALE_DVSN_CD'(특정ITEM) 코드를 행으로 가져 올 수 있을 까요?
- 'SALE_DVSN_CD'
: A, M --> A
M
- SALE_DYWK_CD
: 2,3,4 -> 2
3
4
2. BUSE_CD_LIST 의 ITEM DATA를 행으로 가져 올 수 있을까요?
| BUSE_CD | BUSE_NM |
| AAA | 판매1 |
| AAB | 판매2 |
고수님들께 답변 부탁 드리겠습니다~~~
---- 아 래 -----
{
"SALE_CD": {
"SALE_CD_LIST": {
"COUNT": 2,
"ITEMS": [
{
"SALE_DVSN_CD": "A,M",
"SALE_DYWK_CD": "2,3,4",
"SALE_AMPM_CD": "A,P",
"SALE_CD": "A01,A02,M01,M02,M03",
"SALE_NM": "재고1,재고2,물품1,물품2,물품3"
},
{
"SALE_DVSN_CD": "M",
"SALE_DYWK_CD": "5",
"SALE_AMPM_CD": "A",
"SALE_CD": "M01,M02",
"SALE_NM": "물품1,물품2"
}
]
}
},
"BUSE_CD": {
"BUSE_CD_LIST": {
"BUSE_CD_COUNT": 2,
"ITEMS": [
{
"BUSE_CD": "AAA",
"BUSE_NM": "판매1"
},
{
"BUSE_CD": "AAB",
"BUSE_NM": "판매2"
}
]
},
"SALE_ID_LIST": {
"SALE_ID_COUNT": 3,
"ITEMS": [
{
"SALE_ID": "111111",
"SALE_NM": "홍길동"
},
{
"SALE_ID": "111112",
"SALE_NM": "강감찬"
},
{
"SALE_ID": "111113",
"SALE_NM": "김길동"
},
]
}
},
}
WITH JSON_TBL AS
(SELECT
'{
"SALE_CD": {
"SALE_CD_LIST": {
"COUNT": 2,
"ITEMS": [
{
"SALE_DVSN_CD": "A,M",
"SALE_DYWK_CD": "2,3,4",
"SALE_AMPM_CD": "A,P",
"SALE_CD": "A01,A02,M01,M02,M03",
"SALE_NM": "재고1,재고2,물품1,물품2,물품3"
},
{
"SALE_DVSN_CD": "M",
"SALE_DYWK_CD": "5",
"SALE_AMPM_CD": "A",
"SALE_CD": "M01,M02",
"SALE_NM": "물품1,물품2"
}
]
}
},
"BUSE_CD": {
"BUSE_CD_LIST": {
"BUSE_CD_COUNT": 2,
"ITEMS": [
{
"BUSE_CD": "AAA",
"BUSE_NM": "판매1"
},
{
"BUSE_CD": "AAB",
"BUSE_NM": "판매2"
}
]
},
"SALE_ID_LIST": {
"SALE_ID_COUNT": 3,
"ITEMS": [
{
"SALE_ID": "111111",
"SALE_NM": "홍길동"
},
{
"SALE_ID": "111112",
"SALE_NM": "강감찬"
},
{
"SALE_ID": "111113",
"SALE_NM": "김길동"
},
]
}
},
}' J_VAL FROM DUAL
)
SELECT REGEXP_SUBSTR(SALE_DVSN_CD, '[^,]+', 1, LEVEL) AS SALE_DVSN_CD
FROM (
SELECT JT.*
FROM JSON_TBL
, JSON_TABLE(J_VAL, '$.SALE_CD.SALE_CD_LIST.ITEMS[0]' -- 첫번째, 전체는: [*]
COLUMNS ( row_number FOR ORDINALITY
, SALE_DVSN_CD VARCHAR2(100) PATH '$.SALE_DVSN_CD'
, SALE_DYWK_CD VARCHAR2(100) PATH '$.SALE_DYWK_CD'
, SALE_AMPM_CD VARCHAR2(100) PATH '$.SALE_AMPM_CD'
, SALE_CD VARCHAR2(100) PATH '$.SALE_CD'
, SALE_NM VARCHAR2(100) PATH '$.SALE_NM'
)
) AS JT
)
CONNECT BY LEVEL <= REGEXP_COUNT(SALE_DVSN_CD, ',') + 1;
;
구분자를 이용 Row로 표시 방법만 해보았습니다..
https://dataonair.or.kr/db-tech-reference/d-lounge/technical-data/?mod=document&uid=235947
JSON이면 컬럼을 “.”을 이용해 쉽게 접근이 가능하네요..
너무 감사합니다~~