Ref Курсоры предназначены для использования в вызовах программ: они сопоставляются с классами JDBC или ODBC ResultSet. Они не могут быть использованы в качестве входных данных для вызова таблицы (). Кроме того, нет смысла вызывать вашу функцию в SQL, потому что вы можете просто выполнить встроенный запрос в SQL.
основная таблица огромна, и каждый раз выбирается внутренний запрос, назначенный для USER_GROUP
Так что, может быть, вам нужен факторинг подзапроса AKA предложение WITH?
with ug as (
select con2.CODE_PART_VALUE
from IFSAPP.ACCOUNTING_ATTRIBUTE_CON2 con2
where COMPANY = 'XYZ'
and ATTRIBUTE = 'ABC'
and CODE_PART = 'J'
and con2.ATTRIBUTE_VALUE=407
AND rownum = 1
)
select *
from ifsapp.butce_gerceklesme t
join ug on t.USER_GROUP = ug.CODE_PART_VALUE
WHERE t.budget_year = '2018'
Настройка запросов в StackOverflow - игра в кружки, потому что есть очень много вещей, которые могут быть ответственны за неоптимальную производительность. Но, как правило, вы должны попытаться настроить весь запрос. Инкапсуляция его части в PL / SQL вряд ли улучшит время отклика и может даже ухудшить их.