バインド変数は、コードの一部をバインドするためではなく、変数をバインドするためのものです。 Oracleは、クエリまたはコードのブロックをコンパイルしてキャッシュし、さまざまなパラメータを使用してそれを数回実行できるという考え方です。
ただし、計算式を置き換えるためにパラメータバインディングを使用しようとします。コードブロックのコンパイルとキャッシュが妨げられるため、サポートされていません。
さらに、現在の構文では表現できません。 Oracleがtmp := :f
を検出した場合 パラメータf
を簡単に割り当てたいと考えています 変数tmp
に 。関数を評価する必要はありません。
実用的なソリューションを使用してください。結局のところ、それは機能します。