SQL избегать вызова одной и той же функции дважды в операторе select - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть оператор выбора, вызывающий одну и ту же функцию два раза для возврата двух разных столбцов, так как одна и та же функция вызывается дважды, это создает проблему производительности.

Я хочу вызвать функцию только один раз и скопировать ее значение в другой столбец. Возможно ли это в оракуле?

SELECT ID
    ,PKGRESTFUNCTION.getBlock(table.ID, table.TYPE) "BLOCK" 
    ,PKGRESTFUNCTION.getBlock(table.ID, table.TYPE) "MASK"
    from table 
    where ID=condition;

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете использовать с предложением для однократного получения данных

with block as (
select PKGRESTFUNCTION.getBlock(table.ID, table.TYPE) as block 
from table
 where ID=condition;
) select ID, block.block as "BLOCK" , block.block as "MASK" from block 

Предложение WITH или условие факторинга подзапроса является частью стандарта SQL-99 и было добавленов синтаксис Oracle SQL в Oracle 9.2.Предложение WITH может быть обработано как встроенное представление или разрешено как временная таблица.Преимущество последнего состоит в том, что повторные ссылки на подзапрос могут быть более эффективными, так как данные легко извлекаются из временной таблицы, а не запрашиваются каждой ссылкой .Вы должны оценивать влияние предложения WITH на производительность в каждом конкретном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...