문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| oracle:split_to_table [2018/10/04 08:19] – taekgu | oracle:split_to_table [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| ===== String to Table ===== | ===== String to Table ===== | ||
| String으로부터 table얻기위한 방법 | String으로부터 table얻기위한 방법 | ||
| + | |||
| + | ==== Table 얻기 === | ||
| <code sql> | <code sql> | ||
| - | SELECT | + | SELECT |
| FROM TABLE(FT_SPLIT_ARRAY(av_str_mail ,' | FROM TABLE(FT_SPLIT_ARRAY(av_str_mail ,' | ||
| + | </ | ||
| + | ==== FT_SPLIT_ARRAY | ||
| + | <code sql> | ||
| + | CREATE OR REPLACE FUNCTION FT_SPLIT_ARRAY ( | ||
| + | av_str | ||
| + | , av_split IN VARCHAR2 | ||
| + | ) RETURN PIPE_FT_SPLIT_ARRAY_TAB PIPELINED IS | ||
| + | / | ||
| + | | ||
| + | | ||
| + | an_num에 값이 있을때는 그 값에 해당하는 자른 문자열을 반환한다. | ||
| + | ex> SELECT FN_SPLIT( ' | ||
| + | RETURN 123456789; | ||
| + | SELECT FN_SPLIT( ' | ||
| + | RETURN 456; | ||
| + | | ||
| + | | ||
| + | | ||
| + | ● 빈값일 때는 ' ' 스페이스를 인수로 받아야 함 | ||
| + | **********************************************************************************/ | ||
| + | --변수선언부 | ||
| + | n_len | ||
| + | v_RtValue | ||
| + | BEGIN | ||
| + | IF av_str IS NOT NULL THEN | ||
| + | BEGIN | ||
| + | -- 문자열에 해당 구분자가 몇개 있는지 구한다. | ||
| + | SELECT LENGTH( av_str ) - LENGTH( REPLACE( av_str, av_split, '' | ||
| + | INTO n_len | ||
| + | FROM DUAL; | ||
| + | |||
| + | EXCEPTION | ||
| + | WHEN NO_DATA_FOUND THEN | ||
| + | n_len := 0; | ||
| + | WHEN OTHERS THEN | ||
| + | n_len := 0; | ||
| + | END; | ||
| + | END IF; | ||
| + | |||
| + | IF n_len IS NULL THEN | ||
| + | BEGIN | ||
| + | n_len := 0; | ||
| + | END; | ||
| + | END IF; | ||
| + | |||
| + | |||
| + | FOR i IN 0..n_len LOOP --해당문자열 갯수만큼 FOR문을 돌면서 값을 구한다. | ||
| + | SELECT | ||
| + | NVL( REGEXP_SUBSTR( av_str, ' | ||
| + | INTO v_RtValue | ||
| + | FROM DUAL ; | ||
| + | PIPE ROW(PIPE_FT_SPLIT_ARRAY_TYPE(I+1, | ||
| + | END LOOP; | ||
| + | END; | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== PIPE_FT_SPLIT_ARRAY_TYPE ==== | ||
| + | <code sql> | ||
| + | create or replace TYPE PIPE_FT_SPLIT_ARRAY_TYPE AS OBJECT | ||
| + | ( | ||
| + | RT_SEQ | ||
| + | RT_VALUE | ||
| + | ) | ||
| </ | </ | ||
| + | ==== PIPE_FT_SPLIT_ARRAY_TAB ==== | ||
| <code sql> | <code sql> | ||
| + | create or replace TYPE PIPE_FT_SPLIT_ARRAY_TAB AS TABLE OF PIPE_FT_SPLIT_ARRAY_TYPE | ||
| </ | </ | ||