代码之家  ›  专栏  ›  技术社区  ›  2787184

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

  •  2
  • 2787184  · 技术社区  · 6 年前

    我有一个select语句两次调用同一个函数以返回两个不同的列,因为同一个函数被两次调用,所以它会造成性能问题。

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

    SELECT ID
        ,PKGRESTFUNCTION.getBlock(table.ID, table.TYPE) "BLOCK" 
        ,PKGRESTFUNCTION.getBlock(table.ID, table.TYPE) "MASK"
        from table 
        where ID=condition;
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Ori Marko    6 年前

    你可以使用 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子句或子查询factoring子句是SQL-99标准的一部分,已添加到Oracle9.2中的OracleSQL语法中。WITH子句可以作为内联视图处理,也可以作为临时表解析。后者的优点是,对子查询的重复引用可能比 数据很容易从临时表中检索,而不是由每个引用重新查询。 .您应该逐个评估WITH子句的性能影响。