As variáveis de ligação são para variáveis de ligação, não para partes de código de ligação. A ideia é que o Oracle possa compilar e armazenar em cache uma consulta ou bloco de código e executá-lo várias vezes com diferentes parâmetros.
No entanto, você tenta usar a associação de parâmetros para substituir a fórmula calculada. Isso impediria a compilação e o armazenamento em cache do bloco de código e, portanto, não é suportado.
Além disso, não pode ser expresso com a sintaxe atual. Se o Oracle vir
tmp := :f
ele pensa que você simplesmente deseja atribuir o parâmetro f
para a variável tmp
. Ele não espera ter que avaliar uma função. Basta ir com a solução de trabalho. Afinal funciona.