Свързващите променливи са за обвързване на променливи, а не за обвързване на части от код. Идеята е, че Oracle може да компилира и кешира заявка или блок от код и да ги изпълни няколко пъти с различни параметри.
Въпреки това се опитвате да използвате обвързване на параметър за замяна на изчислената формула. Това би предотвратило компилирането и кеширането на блока от код и следователно не се поддържа.
Освен това не може да се изрази с текущия синтаксис. Ако Oracle вижда tmp := :f
смята, че просто искате да присвоите параметъра f
към променливата tmp
. Не очаква да трябва да оценява функция.
Просто отидете с работния разтвор. В крайна сметка работи.