Bindvariabelen zijn voor het binden van variabelen, niet voor het binden van stukjes code. Het idee is dat Oracle een query of codeblok kan compileren en cachen en meerdere keren kan uitvoeren met verschillende parameters.
U probeert echter parameterbinding te gebruiken om de berekende formule te vervangen. Het zou het compileren en cachen van het codeblok verhinderen en wordt dus niet ondersteund.
Bovendien kan het niet worden uitgedrukt met de huidige syntaxis. Als Oracle tmp := :f
. ziet hij denkt dat je eenvoudig de parameter f
. wilt toewijzen naar de variabele tmp
. Het verwacht niet dat het een functie moet evalueren.
Ga gewoon voor de werkende oplossing. Het werkt tenslotte.