题
有没有一种方法可以使用 WITH
陈述?
就像是
WITH T AS
(
SELECT * FROM Tbl
)
BEGIN
OPEN P_OUTCURSOR FOR
SELECT * FROM T;
SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;
我想选择一些数据及其计数...
解决方案
您只能在CTE之后有一个语句。但是,您可以根据前一个定义后续的CTE:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
鉴于您正在尝试计算行并从相同结果集中填充REF光标,因此进行以下操作可能更合适:
- 创建视图
- 阶段临时结果在温度表中
最后,如果查询足够简单,只需将其写为计数,然后再为光标编写。简单和可读性胜过 干燥 在这种情况下。
其他提示
不,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;
存储临时结果集的“普通”甲骨文(如果需要)是使用 GTT:
GLOBAL TEMPORARY
桌子.
不隶属于 dba.stackexchange