変動性区分

(5.6)

DETERMINISTIC
ルーチンは、同じ入力パラメータに対して常に同じ結果を生成する場合は「決定的」と見なされ、それ以外の場合は「非決定的」と見なされます。
関数が決定的であることを宣言するには、明示的に DETERMINISTIC を指定する必要があります。

(12cR1)


DETERMINISTIC

ファンクションがそのパラメータの同じ値でコールされたときに常に同じ結果値を戻すことを示します。DETERMINISTICはファンクション内で1回のみ使用できます。


このキーワードは、ファンクション索引の式に指定するか、
あるいはREFRESH FASTまたはENABLE QUERY REWRITEとマークされたマテリアライズド・ビューの問合せからファンクションを起動する場合に指定する必要があります。
データベースでは、このようなコンテキストの1つで決定的ファンクションが検出されると、
ファンクションが再実行されるのではなく、以前に計算した結果の使用が可能なかぎり試行されます。

 

(9.4)

IMMUTABLE
→ 同一引数に対する呼び出しは常に同一の結果を返すことが保証されています。データベースを変更することができません。

STABLE
→ 単一の文内ですべての行に対して同一の引数を渡した場合に同一の結果を返すことが保証されています。データベースを変更することができません。

VOLATILE
→ 同一引数で続けて呼び出したとしても異なる結果を返すことができます。データベースの変更を含む、すべてを行うことができます。 (デフォルト)

 

(2019)

https://docs.microsoft.com/ja-jp/sql/t-sql/statements/create-function-transact-sql?view=sql-server-ver15

IsDeterministic
決定性のプロパティは、SQL Server によって自動的に決定されます。