Le variabili di associazione servono per l'associazione di variabili, non per l'associazione di parti di codice. L'idea è che Oracle possa compilare e memorizzare nella cache una query o un blocco di codice ed eseguirlo più volte con parametri diversi.
Tuttavia, si tenta di utilizzare l'associazione di parametri per sostituire la formula calcolata. Impedrebbe la compilazione e la memorizzazione nella cache del blocco di codice e quindi non è supportato.
Inoltre, non può essere espresso con la sintassi corrente. Se Oracle vede tmp := :f
pensa che tu voglia semplicemente assegnare il parametro f
alla variabile tmp
. Non si aspetta di dover valutare una funzione.
Basta andare con la soluzione funzionante. Dopotutto funziona.