40 lines
1.5 KiB
Markdown
40 lines
1.5 KiB
Markdown
|
|
||
|
저장용 데이터 자르기 PL/SQL
|
||
|
|
||
|
WITH TMP AS (SELECT :ar_data AS STR FROM DUAL)
|
||
|
SELECT
|
||
|
REGEXP_SUBSTR(TMP.STR, '[^|]+', 1, LEVEL) CODE
|
||
|
FROM
|
||
|
DUAL, TMP
|
||
|
CONNECT BY REGEXP_SUBSTR(TMP.STR, '[|]+', 1, LEVEL) IS NOT NULL;
|
||
|
|
||
|
|
||
|
-- 데이터 1개
|
||
|
select substr(:ar_data, 1, instr(:ar_data, '|', 1) - 1)
|
||
|
from dual
|
||
|
|
||
|
-- 나머지 데이터
|
||
|
select substr(:ar_data, instr(:ar_data, '|', 1) +1)
|
||
|
from dual
|
||
|
|
||
|
|
||
|
### 행으로 분리
|
||
|
WITH TT AS
|
||
|
(
|
||
|
SELECT 'AAA,BBB,CCC,DDD.EEE' TXT FROM DUAL
|
||
|
)
|
||
|
SELECT TRIM(REGEXP_SUBSTR(TXT, '[^,]+', 1, LEVEL)) AS TXT
|
||
|
FROM TT
|
||
|
CONNECT BY INSTR(TXT, ',', 1, LEVEL - 1) > 0
|
||
|
|
||
|
### 열로 분리
|
||
|
SELECT A.TEXT_DATA
|
||
|
,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 1, 'i')) AS DATA_01
|
||
|
,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 2, 'i')) AS DATA_02
|
||
|
,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 3, 'i')) AS DATA_03
|
||
|
,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 4, 'i')) AS DATA_04
|
||
|
,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 5, 'i')) AS DATA_05
|
||
|
,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 6, 'i')) AS DATA_06
|
||
|
,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 7, 'i')) AS DATA_07
|
||
|
,TRIM(REGEXP_SUBSTR(REPLACE(TEXT_DATA, '|', '| '), '[^|]+', 1, 8, 'i')) AS DATA_08
|
||
|
FROM (SELECT :IN_DATA AS TEXT_DATA, REGEXP_COUNT(:IN_DATA, '\|') AS C1_1 FROM DUAL) A
|