공대 (Logical Life)/프로그래밍
oracle pl/sql pipelined를 사용한 table 형태 반환 function
포도라떼
2012. 11. 13. 16:55
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
/* PACKAGE SPEC */
CREATE OR REPLACE PACKAGE APPS.KBMIN_TEST IS
--Return Row type
TYPE menu_rec_kbmin IS RECORD
(
test1 VARCHAR2(100),
test2 NUMBER
);
--Return 하게될 Row type Array
TYPE menu_rec_set_kbmin IS TABLE OF menu_rec_kbmin;
FUNCTION getTable RETURN menu_rec_set_kbmin PIPELINED;
END KBMIN_TEST; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
/* PACKAGE BODY */
CREATE OR REPLACE PACKAGE BODY APPS.KBMIN_TEST IS
FUNCTION getTable
RETURN menu_rec_set_kbmin PIPELINED
IS
v_menu menu_rec_kbmin;
BEGIN
FOR func_cur IN (SELECT 'a' AS test1, 1 AS test2 FROM dual
UNION ALL
SELECT 'b' AS test1, 2 AS test2 FROM dual)
LOOP
v_menu.test1 := func_cur.test1;
v_menu.test2 := func_cur.test2;
PIPE ROW (v_menu);
END LOOP;
END getTable;
END KBMIN_TEST; |
위의 첫번째 소스는 package의 spec이고 두번째 소스는 body입니다.
1 |
SELECT * FROM TABLE(kbmin_test.getTable()); |
function을 호출해서 table을 보려면 위와같이 콜해주면 됩니다. pipelined를 이용해서 table형태 반환하는 function을 만드려고 검색하는데 보기 쉬운 예제가 잘 없길래 적당히 만들어 봤어요.
결과 화면입니다.