在 oracle优化培训之第二期 的课程中, 我给学员讲了with as的几个用途,下面逐一介绍:
1. 通过materilize生成临时表, 达到优化SQL目的....比如一个大表(或一段查询块), 在SQL中被多次使用, 每次访问表, 都有一些共同的过滤条件, 过滤之后, 结果集变小, 这种情况就比较适合使用with as的写法....在12.2及以上版本中, materialize 有个新特性, 叫CURSOR DURATION MEMORY, 可以把结果集保存在内存中, 而不是写到temp表空间, 可以提升效率.
2.提高代码可读性...with as的递归写法替代实现.
4. 12c新特性 inline function, SQL里面可以内嵌函数
如下面示例(这个with , 没有as):
WITH
function cal_new_sal...5.构造测试用例用临时数据
前面提高代码可读性的示例已经用到了, 下面示例是在19c之前, 使用listagg并去重的一种写法, with as的作用是生成了几行测试记录, 避免了建表和插入记录的麻烦