PLSQLのテーブルファンクションの使い方です。
パッケージの仕様部に以下のように宣言します。
CREATE OR REPLACE PACKAGE SAMPLE_PKG AS
TYPE rec IS RECORD(
COL1 CHAR(2),
COL2 CHAR(4)
);
TYPE rec_tab IS TABLE OF rec;
FUNCTION FUNC
RETURN rec_tab PIPELINED;
END SAMPLE_PKG;
FUNCというファンクションを宣言しています。PIPELINEDはパフォーマンスが良いので記述します。
rec_tabというコレクションを宣言していますが、INDEX BY BINARY_INTEGERと記述しません。これは記述すると、索引付表(結合配列、PLSQL表)になり、索引付表はテーブルファンクションに使うことができないためです。
本体でテーブルファンクションの為の定義を記述します。
CREATE OR REPLACE PACKAGE BODY SAMPLE_PKG AS
FUNCTION FUNC
RETURN rec_tab PIPELINED
IS
/* カーソル */
CURSOR cur
IS
SELECT ~;
BEGIN
FOR rec IN cur
LOOP
PIPE ROW(rec);
END LOOP;
RETURN;
END FUNC;
END SAMPLE_PKG;
このファンクションを使用するにはTABLEを使用します。
SELECT *
FROM TABLE(パッケージ名.FUNC)
VIEWより高速なのでテーブルファンクションは覚えておくと便利です。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
資格:少額短期保険募集人,FP3級
コメント