Answers:
CTE之后只能有一份声明。但是,您可以基于上一个定义后续的CTE:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
假定您要计算行数并从同一结果集中填充ref游标,则执行以下操作之一可能更合适:
最后,如果查询足够简单,则只需为计数计数一次,然后为游标写入一次即可。在这种情况下,简单性和可读性胜过DRY原则。
不,CTE或with
子句在单个语句的范围内定义
有时,尽管有一条语句,但是您可以做的事超出预期,例如:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
Oracle存储临时结果集的“正常”方法(如有必要)是使用GTT:
GLOBAL TEMPORARY
table。