- 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 3Pipelined 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으로 구현되어 있다.
'Database > SQL Tuning' 카테고리의 다른 글
| [Function] 스칼라 서브쿼리에서 수행하도록 변경 (0) | 2015.08.28 |
|---|---|
| [Oracle] Function 내부작동 및 Nasted Loops Join / Hash Join (0) | 2015.08.25 |
| [Merge] Update 컬럼은 On 절에 사용 할수 없을 때 (0) | 2015.08.24 |
| Updatable join view / Merge / Instead of Trigger (0) | 2015.08.24 |
| filter 방식 join 방식 / 스칼라 서브쿼리와 조인 (0) | 2015.08.21 |