안녕하십니까, 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이면 컬럼을 “.”을 이용해 쉽게 접근이 가능하네요..