Bindningsvariabler är för bindande variabler, inte för bindande kodbitar. Tanken är att Oracle kan kompilera och cache en fråga eller kodblock och exekvera det flera gånger med olika parametrar.
Du försöker dock använda parameterbindning för att ersätta den beräknade formeln. Det skulle förhindra kompilering och cachelagring av kodblocket och stöds därför inte.
Dessutom kan det inte uttryckas med den aktuella syntaxen. Om Oracle ser tmp := :f
den tror att du helt enkelt vill tilldela parametern f
till variabeln tmp
. Den förväntar sig inte att behöva utvärdera en funktion.
Gå bara med den fungerande lösningen. Det fungerar trots allt.