PLSQLのテーブルファンクションの使い方
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の大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント