CREATE OR REPLACE PACKAGE pac1
IS
/**********************************************************/
/** レコード型の宣言 (テーブル・ファンクションの行の型) */
/**********************************************************/
TYPE rec_type is record
( col1 NUMBER,
col2 VARCHAR2(10)
);
/**********************************************************/
/** そのレコード型のコレクションの型 **/
/**********************************************************/
TYPE rec_tab_type IS TABLE OF rec_type;
--
/************************************************************/
/** そのコレクション型を返すテーブル・ファンクションの宣言 **/
/************************************************************/
FUNCTION f1(p1 IN NUMBER) RETURN rec_tab_type PIPELINED;
END PAC1;
/
CREATE OR REPLACE PACKAGE BODY pac1
IS
/***********************************************************/
/* テーブル・ファンクション f1 の定義 */
/***********************************************************/
FUNCTION f1(p1 IN NUMBER) RETURN rec_tab_type PIPELINED
IS
rec rec_type; -- 1行のレコード変数
BEGIN
FOR I IN 1..p1 LOOP -- 1~P1までのループ
rec.col1 := I; -- col1列に値をセット
rec.col2 := 'ABC' || TO_CHAR(I); -- col2列に値をセット
PIPE ROW(rec); -- その行をパイプに流して呼び出し元に返す
END LOOP;
RETURN; -- よって、RETURN文は値を返さない(形式的に必要)
END f1;
END PAC1;
/
SELECT * FROM TABLE(pac1.f1(5));
COL1 COL2
---------- ----------
1 ABC1
2 ABC2
3 ABC3
4 ABC4
5 ABC5