すべてのプロダクト
Search
ドキュメントセンター

PolarDB:テーブル値関数

最終更新日:Jun 03, 2024

テーブル値関数は、SELECTステートメントのFROM句内で実行できる関数です。 これらの関数は、TABLE句を使用して行または列のデータに変換できるコレクションを返します。 変換されたデータはSQL文で処理できます。

シナリオ

テーブル値関数は、次のシナリオに適しています。

  • SQL文を使用して異なるテーブルに格納されているデータをマージするなど、セッション内のデータテーブルをマージします。
  • プログラミングによってデータセットを構築し、特定の形式でデータセットをクライアントに渡します。 テーブル値関数を使用して、リレーショナルテーブルを構築せずに構築されたデータセットを生成できます。
  • パイプライン関数を使用した並列クエリのパフォーマンスの向上。 テーブル値関数は、所属するクエリをシリアル化でき、クエリのパフォーマンスを向上させることができます。

テーブル値関数の作成

  1. 関数のRETURN型は、コレクション型として定義する必要があります。 通常、コレクションはネストされたテーブルまたは変数配列です。 それはまた、関連するアレイであってもよい。
    説明 型は、CREATE typeステートメントを使用してデータベースレベルで定義する必要があります。 パイプライン関数の場合、型はパッケージで定義することもできます。
  2. 関数のすべてのパラメーターはinモードで、SQL文と互換性がある必要があります。 たとえば、RECORD型のパラメーターは、SQL文では許可されないため、関数では許可されません。
  3. 関数の呼び出しは、TABLE句に埋め込まれています。

テーブル値関数の作成
  1. ネストされたテーブルを作成します。
    CREATE OR REPLACE TYPE polar_strings IS TABLE OF VARCHAR2 (100);
  2. ネストされたテーブル型を返すテーブル値関数を作成します。
    CREATE OR REPLACE FUNCTION get_random_str (INTEGERでcount_in)
    RETURN polar_strings
    IS
    アイテムpolar_strings := polar_strings ();
    開始
    item.EXTEND (count_in);
    FOR i IN 1 .. count_in
    ループ
    アイテム (i) := DBMS_RANDOM.string ('u', 10);
    エンドループ;
    返品アイテム。エンド; 
  3. PL/SQLでテーブル値関数を呼び出して文字列を生成します。
    DECLARE
    アイテムpolar_strings := get_random_str (5);
    開始
    FOR i IN 1 .. アイテム. カウント
    ループ
    DBMS_OUTPUT.put_line (アイテム (i));
    エンドループ;
    エンド; 
    次の出力が返されます。
    CIDKUKWNMV
    GRSNSGJULU
    XXCMTMLYUI
    YWQDIMNEZA
    BHTWWLCGFN 
テーブル値関数を呼び出します。
  • get_random_strテーブル値関数を呼び出します。 パラメーター値は5に設定され、5つのランダムな文字列を返すように指定します。
    SELECT rs.COLUMN_VALUE my_string FROM TABLE (get_random_str (5)) rs
    次の出力が返されます。
    my_string
    ------------
     JAFSOSYOUA
     VNWSAAAHNA
     MAEDHVHLIU
     PRWUJLPKZJ
     MWZKQZKQJZ
    (5行のレコード) 
  • 明示的に宣言されたcount_inパラメーター値を含むget_random_str関数を呼び出します。 5つのランダムな文字列を返すように指定します。
    SELECT COLUMN_VALUE my_string FROM TABLE (get_random_str (count_in => 5))
    次の出力が返されます。
    my_string
    ------------
     TRHYTVPPOU
     DJFDIYAYAF
     BKJOYQFAJR
     YCIIBEFSVT
     OYCUDMUDMX
    (5行のレコード) 
  • 5つのランダムな文字列を返すget_random_str関数を呼び出します。 次に、SUMおよびAVG関数が呼び出されて、5つのランダムな文字列の合計および平均の長さが返されます。
    SELECT SUM (LENGTH (COLUMN_VALUE)) total_length、
           AVG (長さ (COLUMN_VALUE)) average_length
      FROM TABLE (get_random_str (5)) 
    次の出力が返されます。
    total_length | average_length
    -------------- ---------------------
               50 | 10.0000000000000000
    (1行のレコード)