본문 바로가기

db/oracle

oracle 문자열 테이블 리스트 만들기

반응형

oracle 문자열 테이블 리스트 만들기

오라클 문자열 테이블 리스트 만들기
  • 실행예제 : SELECT * FROM TABLE(fn_to_table('value1,value2,value3'));
  • Oracle 데이터베이스에서 문자열을 쉼표로 구분하여 분리하고, 분리된 각 값을 테이블 형태로 반환하는 함수 fn_to_table를 정의하는 SQL 스크립트입니다
CREATE OR REPLACE TYPE vc_array AS TABLE OF VARCHAR2(4000);
/

create or replace NONEDITIONABLE FUNCTION fn_to_table(list VARCHAR2)
RETURN vc_array PIPELINED
AS
  v_column_value VARCHAR2(4000);
BEGIN
  FOR i IN (SELECT REGEXP_SUBSTR(list, '[^,]+', 1, LEVEL) AS val
            FROM dual
            CONNECT BY REGEXP_SUBSTR(list, '[^,]+', 1, LEVEL) IS NOT NULL)
  LOOP
    v_column_value := i.val;
    PIPE ROW (v_column_value);
  END LOOP;
END;
  • CREATE OR REPLACE TYPE vc_array AS TABLE OF VARCHAR2(4000); : 이 부분은 vc_array라는 이름의 사용자 정의 데이터 타입을 생성하거나 기존에 있는 타입을 대체합니다. TABLE OF VARCHAR2(4000)은 이 타입이 VARCHAR2(4000) 문자열을 여러 개 담을 수 있는 테이블(컬렉션) 형태임을 나타냅니다. 즉, 문자열 배열과 비슷한 역할을 합니다.
  • RETURN vc_array PIPELINED : 이 함수는 vc_array 타입의 테이블을 반환하며, PIPELINED 키워드는 함수가 한 번에 모든 결과를 반환하는 것이 아니라, 각 행을 처리할 때마다 순차적으로 반환한다는 것을 의미합니다.  이 방식을 사용하면 대량의 데이터를 처리할 때 메모리 사용량을 줄일 수 있습니다.
  • FOR i IN (SELECT REGEXP_SUBSTR(list, '[^,]+', 1, LEVEL) AS val ... ) :  FOR 루프를 사용하여 문자열을 분리하고 각 값을 처리합니다.
  • REGEXP_SUBSTR(list, '[^,]+', 1, LEVEL) : 이 함수는 정규 표현식을 사용하여 문자열 list를 쉼표(,)를 기준으로 분리합니다. [^,]+는 쉼표가 아닌 문자가 하나 이상 연속되는 부분을 매치하는 정규 표현식입니다. 1은 검색 시작 위치, LEVEL은 현재 처리 중인 문자열 조각의 순서를 나타냅니다.
  • PIPE ROW (v_column_value); :  v_column_value의 값을 결과 테이블의 한 행으로 반환합니다.  PIPELINED 함수이므로 PIPE ROW를 사용하여 각 행을 순차적으로 반환합니다.
반응형

'db > oracle' 카테고리의 다른 글

oracle duration time 함수  (0) 2025.02.10
oracle TO_TIMESTAMP 유연성과 안정성  (0) 2025.02.10
oracle 퍼센트 구하기 함수  (0) 2025.02.09
oracle round 함수  (0) 2025.02.09
oracle floor 함수  (1) 2025.02.08