SQLSELECT
ステートメントでは、そのステートメントのスコープに対して決定論的な関数を実行したいと思いますSELECT
(またはトランザクションも問題ありません)。
select t.x, t.y, my_function(t.x) from t
の多くの値はt.x
同じであるため、Oracle は同じ関数を何度も呼び出すことを省略して、処理を高速化できます。しかし、関数に というラベルを付けるとDETERMINISTIC
、このクエリを数回実行する間に結果がキャッシュされる可能性があります。使用できない理由は、時々変更される構成パラメーターを使用するDETERMINISTIC
ためです。my_function
他に使用できるキーワードはありますか?注意すべき点はありますか (メモリの問題、同時実行性など)? あるいは、t.x
値ごとに 1 回だけ関数を呼び出す分析関数などの他のトリック (パフォーマンスに大きな影響を与えずに) はありますか?