我有一个超过1000行的Oracle查询。打破它和/或使用存储过程不是一个选择。我即将更长时间。哪些具有更好的性能?我发现WITH版本更容易阅读。
/* subselect */
select col01
,col02
from (
select case col01 when 'X' then 1 else 2 end col01
,case col02 when 'Y' then 3 else 4 end col02
from (
select upper(col01) col01
,upper(col02) col02
from (
select 'x' as col01
,'y' as col02
from dual
)
)
)
;
---------------------------------------
/* with statement */
with qry01 as (
select 'x' as col01
,'y' as col02
from dual
)
,qry02 as (
select upper(col01) col01
,upper(col02) col02
from qry01
)
,qry03 as (
select case col01 when 'X' then 1 else 2 end col01
,case col02 when 'Y' then 3 else 4 end col02
from qry02
)
select col01
,col02
from qry03
;
答案 0 :(得分:1)
我还发现CTE WITH
表达式更容易阅读。除此之外,有理由更喜欢它。
/*+ MATERIALIZE */
)