IT/DataBase

[Oracle] ์˜ค๋ผํด ์ฝค๋งˆ(,)๋กœ ๊ตฌ๋ถ„๋œ ๋ฌธ์ž์—ด์„ ์—ฌ๋Ÿฌ ํ–‰(Row)์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ (REGEXP_SUBSTR, CONNECT BY)

๊ผฌ๋น„๋žฉ 2026. 6. 6.

oracle connect by level ํ–‰ ๋ถ„๋ฆฌ

์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๊ถŒํ•œ ์ฝ”๋“œ๋ฅผ ๋ณ„๋„ ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๊ธฐ์กด ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ์— ','๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ ์žฌํ•œ ๋‹ค์Œ

์กฐํšŒ ์‹œ ํ•ด๋‹น ๊ถŒํ•œ ๊ฐœ์ˆ˜๋งŒํผ row๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•

WITH USER_DATA AS (
    SELECT 'ํ™๊ธธ๋™' AS USER_NAME, '01,02,03,04' AS AUTH_COL FROM DUAL
)
SELECT  REGEXP_SUBSTR(AUTH_COL, '[^,]+', 1, LEVEL) AS AUTH
      , length(REGEXP_REPLACE(AUTH_COL, '[^,]', '')) + 1
      , level
  FROM USER_DATA
CONNECT BY PRIOR user_name = user_name
   AND PRIOR sys_guid() IS NOT NULL
   AND LEVEL <= length(REGEXP_REPLACE(AUTH_COL, '[^,]', '')) + 1
;

๋Œ“๊ธ€