더북(TheBook)

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

    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이(가) 컴파일되었습니다.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.