일반적인 테이블 함수는 함수 정의 구문이 다른 함수의 구문과 차이가 없었다. 하지만 파이프라인 테이블 함수는 다음과 같이 함수 정의 구문에 몇 가지 옵션이 추가된다.
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이(가) 컴파일되었습니다.