Bru*_*oLM 16 oracle cte select
有没有办法使用WITH
语句执行多个操作?
就像是
WITH T AS
(
SELECT * FROM Tbl
)
BEGIN
OPEN P_OUTCURSOR FOR
SELECT * FROM T;
SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;
Run Code Online (Sandbox Code Playgroud)
我想选择一些数据和它的计数...
Nic*_*mas 17
在 CTE 之后只能有一个语句。但是,您可以根据前一个 CTE 定义后续 CTE:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Run Code Online (Sandbox Code Playgroud)
鉴于您正在尝试计算行数并从同一结果集中填充引用游标,执行以下操作之一可能更合适:
最后,如果查询足够简单,只需为计数编写一次,为游标编写一次。在这种情况下,简单性和可读性胜过DRY原则。
Jac*_*las 10
有时,您可以使用一条语句完成超出预期的更多事情,例如:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
Run Code Online (Sandbox Code Playgroud)
存储临时结果集的“正常”Oracle 方法(如果必须)是使用GTT:
GLOBAL TEMPORARY
table。