Bind-variabler er til bindingsvariabler, ikke til binding af kodestykker. Ideen er, at Oracle kan kompilere og cache en forespørgsel eller kodeblok og udføre den flere gange med forskellige parametre.
Du forsøger dog at bruge parameterbinding til at erstatte den beregnede formel. Det ville forhindre kompilering og cachelagring af kodeblokken og er derfor ikke understøttet.
Desuden kan det ikke udtrykkes med den aktuelle syntaks. Hvis Oracle ser tmp := :f
den mener, at du simpelthen vil tildele parameteren f
til variablen tmp
. Den forventer ikke at skulle evaluere en funktion.
Bare gå med den fungerende løsning. Det virker trods alt.