CLOB 컬럼의 JSON 포멧에서 DATA조회 1 3 3,370

by 일곱난장이 [SQL Query] JSON [2022.12.14 15:52:27]


안녕하십니까, 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": "김길동"

        },

      ]

    }

  },

}

by 우리집아찌 [2022.12.15 09:53:59]

질문 이해가 잘안되는데 json 방식으로 데이터를 clob에 넣고 조회하시겠다는 건가요??

그럴거면 따로 테이블 만들어서 쓰시는게 좋을듯한대요.


by 동동동 [2022.12.15 12:10:49]
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이면 컬럼을 “.”을 이용해 쉽게 접근이 가능하네요..


by 일곱난장이 [2022.12.19 08:20:21]

너무 감사합니다~~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입