PL/SQL中是否存在公用表表达式?

Mat*_*ine 5 sql sql-server oracle

我最近在SQL Server中了解了CTE,并尝试在PL/SQL中使用它.我不需要它的反复好处,但是,我想用它来代替创建视图并提高查询性能.只是寻找一些代码可能类似的方向.

Ton*_*ews 11

在Oracle中,这称为子查询因子,它与SQL Server AFAIK中的相同:

with cte as (select * from emp)
select * from cte join dept on dept.deptno = cte.deptno;
Run Code Online (Sandbox Code Playgroud)

请参阅SELECT文档并搜索"factoring".

  • +1:从9i开始支持,子查询因子不支持递归部分直到11g(现在是ANSI),因为Oracle已经使用CONNECT BY语法支持了层次查询...我不记得PostgreSQL何时开始支持语法,可能在v8.x. 但是CTE/Subquery Factoring不会提高查询性能,只是为派生表/内联视图提供不同的语法. (8认同)