为了简化代码或者优化算法,减少对表的扫描,减少循环的嵌套,有时候会把相关的数据暂时保存起来,以重复使用。Oracle 11g中提供了两种结构来实现这个功能,通用表达式(CTE)和临时表。
通用表达式(CTE)【Oracle 9i推出】
结构:
WITH <subquery_name>
AS
(
SQL statement
)
SELECT <column_list>
FROM <subquery_name>
注意:
1、 WITH保存的数据只能用在WITH结构之后的第一个SELECT语句。
2、 如果利用WITH里面的数据,但是又没有出现SELECT关键字,比如说UPDATE,DELETE等就会报错“ORA-00928:遗漏SELECT关键字错误”
比如说下面的例子:
WITH TABLE2 (TABLE2_ID ,TABLE2_NUM ) AS
(
SELECT 1,3 FROM DUAL UNION ALL
SELECT 2,4 FROM DUAL UNION ALL
SELECT 3,6 FROM DUAL
)
UPDAT