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より高速なのでテーブルファンクションは覚えておくと便利です。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA