PLSQLのテーブルファンクションの使い方です。
パッケージの仕様部に以下のように宣言します。
1 2 3 4 5 6 7 8 9 10 |
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表)になり、索引付表はテーブルファンクションに使うことができないためです。
本体でテーブルファンクションの為の定義を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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を使用します。
1 2 |
SELECT * FROM TABLE(パッケージ名.FUNC) |
VIEWより高速なのでテーブルファンクションは覚えておくと便利です。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^