- 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으로 구현되어 있다.
'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 |