همانطور که می دانید فراخوانی تابع در یک کوئری، context switch بین SQL engine و PL/SQL engine را در پی دارد این context switch به لحاظ پرفورمنسی اثر منفی را به دنبال خواهد داشت. برای مثال، دو دستور زیر خروجی یکسانی دارند اما مدت زمان اجرای آنها بسیار متفاوت است.
—اجرای دستور بدون استفاده از function:
SQL> select sum(sal) from(select salary+60 as sal from person);
SUM(SAL)
———-
8891924480
Elapsed: 00:00:00.81
—اجرای دستور با استفاده از function:
SQL> select sum(sal) from(select sal_func(salary) as sal from person);
SUM(SAL)
———-
8891924480
Elapsed: 00:00:10.91