有没有一种方法可以使用 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 桌子
.

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top