SQL避免在select语句中两次调用同一函数

时间:2018-11-20 06:50:18

标签: oracle function select

我有一条select语句,该函数两次调用同一函数以返回两个不同的列,由于同一函数被调用了两次,因此造成了性能问题。

我只想调用一次函数,然后将其值复制到另一列。甲骨文有可能吗?

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

1 个答案:

答案 0 :(得分:4)

您可以使用with clause一次获取数据

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 9.2的Oracle SQL语法中。 WITH子句可以作为内联视图处理,也可以作为临时表解析。后者的优点是重复引用子查询可能更有效,因为可以轻松地从临时表中检索数据,而不是由每个引用重新查询。您应该根据具体情况评估WITH子句的性能含义。