BrunoLM Asked: 2011-10-05 09:33:36 +0800 CST2011-10-05 09:33:36 +0800 CST 2011-10-05 09:33:36 +0800 CST 使用 WITH 的多个操作 772 有没有办法使用WITH语句执行多个操作? 就像是 WITH T AS ( SELECT * FROM Tbl ) BEGIN OPEN P_OUTCURSOR FOR SELECT * FROM T; SELECT COUNT(*) INTO P_OUTCOUNT FROM T; END; 我想选择一些数据和它的计数...... oracle select 2 个回答 Voted Best Answer Nick Chammas 2011-10-05T09:50:53+08:002011-10-05T09:50:53+08:00 CTE 之后只能有一个语句。但是,您可以根据前一个 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原则。 Jack Douglas 2011-10-05T09:37:41+08:002011-10-05T09:37:41+08:00 不,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 TEMPORARYtable。
CTE 之后只能有一个语句。但是,您可以根据前一个 CTE 定义后续 CTE:
鉴于您正在尝试计算行数并从同一结果集中填充 ref 游标,执行以下操作之一可能更合适:
最后,如果查询足够简单,只需为计数编写一次,为游标编写一次。在这种情况下,简单性和可读性胜过DRY原则。
不,CTE 或
with
子句是在单个语句的范围内定义的有时你可以用一个语句做比你预期的更多的事情,例如:
存储临时结果集(如果必须)的“正常”Oracle 方法是使用GTT:
GLOBAL TEMPORARY
table。