首先强制子查询

Rol*_*lan 4 sql oracle oracle10g oraclereports

我正在创建一个多次使用2个嵌入式服务器功能的查询.

问题:函数搜索一个相当大的表,它们需要很长时间才能执行.

目标:使用子查询就像它是一个表一样,这样我就可以引用列而不运行函数来多次生成列.

Example Pseudocode:

Select general.column1, general.column2, general.column1-general.column2
from (select package.function1('I take a long time') column1, 
      package.function2('I take even longer') column2,
      normal_column
      from bigtable) general;
Run Code Online (Sandbox Code Playgroud)

Example Pseudocode:

Select general.column1, general.column2, general.column1-general.column2
from (select package.function1('I take a long time') column1, 
      package.function2('I take even longer') column2,
      normal_column
      from bigtable) general;
Run Code Online (Sandbox Code Playgroud)

当我运行我的代码时,general.column1将引用column1语句中的函数,而不是它返回的数据(这最终是我所追求的).

我对SQL很新,所以感谢任何帮助,如果您需要更多信息,我会尽力提供.

谢谢!

Ale*_*lak 5

我建议你使用子查询因子.第一个子查询只执行一次,然后用于查询的其余部分.

WITH function_result AS
  (SELECT package.function1('I take a long time') column1 
   ,      package.function2('I take even longer') column2
   FROM   dual)
SELECT function_result.column1
,      function_result.column2
,      function_result.column1 - function_result.column2
,      bigtable.normal_column
FROM   bigtable
Run Code Online (Sandbox Code Playgroud)