我有一条select语句,该函数两次调用同一函数以返回两个不同的列,由于同一函数被调用了两次,因此造成了性能问题。
我只想调用一次函数,然后将其值复制到另一列。甲骨文有可能吗?
SELECT ID
,PKGRESTFUNCTION.getBlock(table.ID, table.TYPE) "BLOCK"
,PKGRESTFUNCTION.getBlock(table.ID, table.TYPE) "MASK"
from table
where ID=condition;
答案 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子句的性能含义。