일반적인 테이블 함수는 함수 정의 구문이 다른 함수의 구문과 차이가 없었다. 하지만 파이프라인 테이블 함수는 다음과 같이 함수 정의 구문에 몇 가지 옵션이 추가된다.

        CREATE OR REPLACE FUNCTION 함수명(매개변수 리스트 ...)
            RETURN 컬렉션 타입
          PIPELINED
        IS
        ...
        BEGIN
        ...
          LOOP
        ...
        ...
            PIPE ROW(반환 데이터);
          END LOOP;
          RETURN;
        END;
    

    굵게 표시한 부분이 파이프라인 테이블 함수에만 있는 구문이다. 앞 부분에 PIPELINED이란 키워드를 명시하고, 루프 중간에 있는 PIPE ROW(반환 데이터)가 실제로 데이터를 반환하는 부분이다. 그리고 루프가 끝난 후 RETURN을 만났을 때 이 함수는 일을 마치고 퇴장하는 것이다.

    실제로 파이프라인 테이블 함수를 만들어 보자. 일단 이전에 만들었던 테이블 함수와 똑같이 만들어 두 함수의 동작 방식과 결과를 비교해 보자.

    입력

        CREATE OR REPLACE FUNCTION fn_ch14_pipe_table ( p_n NUMBER )
          RETURN ch14_num_nt
          PIPELINED
        IS
          -- 컬렉션 변수 선언 (컬렉션 타입이므로 초기화를 한다)
          vnt_return ch14_num_nt := ch14_num_nt();
        BEGIN
          -- 1부터 입력 매개변수인 p_n만큼 숫자 넣기
          FOR i IN 1..p_n
          LOOP
            vnt_return.EXTEND;
            vnt_return(i) := i;
    
            -- 컬렉션 타입을 반환
            PIPE ROW (vnt_return(i));
          END LOOP;
          RETURN;
        END;
    

    결과

        FUNCTION FN_CH14_PIPE_TABLE이(가) 컴파일되었습니다.
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.