インライン化された SQL 関数およびコンパイル済み SQL 関数
SQL 関数のインプリメンテーションのタイプには、インライン化された SQL 関数とコンパイル済み SQL 関数の 2 つがあります。
インライン SQL 関数は、多くの場合、最高のパフォーマンスを実現します。
しかし、コンパイル済み SQL 関数ではサポートされる一部の SQL PL 言語フィーチャーおよびデータ・タイプがサポートされていません。
それらのフィーチャーには、次のものが含まれます。
- CASE ステートメント
- REPEAT ステートメント
- カーソルの処理
- 動的 SQL
- 条件ハンドラー
SQL PL モジュールの中で宣言されている SQL 関数は、常にコンパイル済みです。
PL/SQL 関数は、常にコンパイル済みです。 インライン関数は PL/SQL コードの中で参照できますが、PL/SQL を使用して宣言することはできません。 それらは SQL PL を使用して宣言する必要があります。
他のすべての場合について、SQL 関数がインラインかコンパイル済みかは、CREATE FUNCTION ステートメントの構文によって決まります。
- 本体がアトミックの SQL PL 関数は、インライン関数です。 SQL 関数がアトミックであるのは、その内容が単一の RETURN ステートメントである場合、または BEGIN ATOMIC のキーワードで始まる 1 個のコンパウンド・ステートメントで構成される場合です。
- 非アトミック SQL PL 関数は、コンパイル済み関数です。 SQL PL 関数が非アトミックであるのは、その内容がキーワード BEGIN または BEGIN NOT ATOMIC で始まる 1 個のコンパウンド・ステートメントである場合です。
例
- インライン関数
create function F1 (N integer) returns integer deterministic no external action contains sql return N * 10 @create function F2 (N integer) returns integer deterministic no external action contains sql begin atomic if N < 5 then return N * 10 else return N * 20 end if; end @ - コンパイル済み関数
create function F3 (N integer) returns integer deterministic no external action contains sql begin if N < 5 then return N * 10 else return N * 20 end if; end @create function F4 (N integer) returns integer deterministic no external action contains sql begin not atomic if N < 5 then return N * 10 else return N * 20 end if; end @