简介
with temp as (...)语句一般用于临时表,其理念是 "一次分析,多次使用" ,但是还有第二种用法:递归with。
递归with(Recursive WITH Clauses)是一个主要用于层次查询(Hierarchical Queries)的语法。需要oracle的版本为Oracle 11g Release 2及以上。
使用语法
准备好测试数据,如下:
DROP TABLE T_TEST;
CREATE TABLE T_TEST(
ID NUMBER NOT NULL,
COL1 NUMBER
);
INSERT INTO T_TEST VALUES (1, 10);
INSERT INTO T_TEST VALUES (2, 20);
INSERT INTO T_TEST VALUES (3, 30);
INSERT INTO T_TEST VALUES (4, 40);
INSERT INTO T_TEST VALUES (5, 50);
需求:累乘COL1 ,达到下图的计算公式效果
话不多说,直接上代码
WITH TEMP(ID, COL1, RESULT, ITERATER) AS (
-- 取出递归的开始行, 初始化结果和控制递归字段
SELECT ID, COL1,