파이프라인드 테이블 함수

파이프라인드 방식으로 데이터를 처리할 수 있는 파이프라인드 테이블 함수를 설명합니다.

개요

파이프라인드 테이블 함수(Pipelined Table Functions)는 tbPSM의 서브 프로그램을 관계형 테이블과 같이 로우의 형태로 결과를 반환하는 함수입니다. 이 함수는 SQL 문장의 FROM 절에 사용할 수 있으며, IN 모드로 파라미터를 지정하고 결과 집합으로 반환하도록 구성할 수 있습니다.

파이프라인드 테이블 함수를 사용하면 다음과 같은 장점이 있습니다.

  • 응답 시간(Response Time) 결과 집합이 모두 생성될 때까지 기다리지 않고 완료된 부분 결과 집합을 순차적으로 처리할 수 있으므로, 연산의 응답 시간이 빠릅니다.

  • 스트리밍(Streaming) 하나의 연산을 종료하지 않고 일련의 연산을 순차적으로 반복하여 처리할 수 있습니다.

  • 파이프라이닝(Pipelining) 여러 가지 연산을 연속해서 수행할 수 있습니다.

  • 유연성(Flexibility) SQL 문장으로 표현하기 어려운 과정을 필터를 적용한 것처럼 유연하게 처리할 수 있습니다.

함수

파이프라인드 테이블로 만들 수 있는 것은 단독 함수(Standalone Function)뿐입니다. 따라서 로컬 함수(Local Function), 패키지의 멤버 함수 등은 파이프라인드 테이블 함수로 만들 수 없습니다.

파이프라인드 테이블 함수의 세부 내용은 다음과 같습니다.

  • 프로토타입

CREATE TABLE tblname(m1 NUMBER, m2 NUMBER)
/

CREATE OR REPLACE PACKAGE pkg IS
TYPE tbl_rec IS TABLE OF tblname%ROWTYPE; 
END;
/

CREATE OR REPLACE FUNCTION PTF(limit IN NUMBER)
RETURN pkg.tbl_rec PIPELINED 
AS
    x tblname%ROWTYPE;
BEGIN
    FOR i IN 1 .. limit LOOP 
    x.m1 := i;
    x.m2 := i+1; 
    PIPE ROW(X); 
    END LOOP;
END;
/
select * from TABLE(ptf(1000)) where m1 = 500
/
  • 파라미터

파라미터
설명

IN

  • IN 모드만 사용할 수 있음

  • 따라서 OUT, INOUT 모드는 사용할 수 없음

  • 반환값

반환값
설명

배열 또는 테이블

  • 배열이나 테이블로 반환해야 하며, 인덱스 테이블로는 반환할 수 없음

  • 컬렉션의 원소는 데이터베이스 타입이거나, 데이터베이스 타입으로 구성 된 레코드 타입이어야 함

  • 일반 함수와는 다르게 RETURN 문을 사용할 수 없음

  • 하지만 tbPSM 프로 그램의 흐름을 위해 값이 없는 RETURN 문은 사용할 수 있음

  • 예제

파이프라인드 테이블 함수는 PIPELINED라는 키워드를 이용하여 지정할 수 있습니다.

예를 들면 다음과 같습니다.

Last updated