• Return 받을 행을 받는 Object Type을 생성
CREATE OR REPLACE TYPE obj_type AS object
( c1 INT,
  c2 INT
);
/


  • Collection Type 생성
CREATE OR REPLACE TYPE table_type
AS TABLE OF obj_type;
/


  • Table Function을 생성 - 원하는 만큼의 Row를 출력하는 Function
CREATE OR REPLACE FUNCTION table_func (p_start int, p_end int)
  RETURN table_type
  IS
    v_type TABLE_TYPE := table_type();
  BEGIN
   
    FOR i IN p_start..p_end LOOP
      v_type.extend;
      v_type(i) := obj_type(i,i);
    END LOOP;
     
    RETURN v_type;
 END;
 /


  • FROM 절에 'TABLE'이라는 Keyword를 이용해 아래와 같은 결과 추출
SELECT * FROM TABLE(table_func(1,3));
 
 
   C1         C2
----- ----------
    1          1
    2          2
    3          3



Pipelined Table Function은 하나의 Row를 받아서 바로 처리하므로 수행 속도가 빠르다. 이에 비해 Table Function은 전체 Row가 처리된 이후에 동작되므로 Pipelined Table Function에 비해 이전 처리된 Row를 Cache할 Memory를 더 요구하게 된다.


Table Function은 전체 데이터 처리를 수행하지만 Pipelined Table Function은 부분 범위 처리를 수행한다

Oracle 10g부터 사용하는 dbms_xplan Package의 Function들도 Pipelined Table Function으로 구현되어 있다.





출처 : http://www.gurubee.net/lecture/2238

+ Recent posts