Meta把内部设计系统开源了:支撑内部13000+应用:专为Agent调优
2026-07-03
2026-07-08 0
914fcc7ad57defa7868c3be1ca7fb4f5.jpg
Oracle AI Database 23.26.2 解除了此前对 WITH 子句嵌套的限制,现在支持在其他 WITH 子句内部嵌套 WITH 子句,并允许在 WITH 子句有效的任何位置使用。
此前的限制:
WITH 子句(CTE,公共表表达式)只能在查询的最外层定义子查询内部不能使用 WITH 子句WITH 子句内部不能再嵌套 WITH 子句新特性允许:
在 WITH 子句的 SELECT 主体中定义内层 WITH 子句在 FROM 子句的子查询中使用 WITH 子句在 INSERT … SELECT 中使用嵌套 WITH 子句内层 WITH 子句引用外层 WITH 子句的数据(关联引用)多层嵌套(三层及以上)仍然不支持的:
递归嵌套(WITH 内部直接引用自身)嵌套 WITH 子句内部定义 PL/SQL 函数嵌套 WITH 子句内部使用表值构造器(Table Value Constructors)关于内联提示:现有提示(inline/materialize)仍可使用,但在嵌套场景下可能被忽略,不影响非嵌套查询块的行为。
同之前一样,使用用户NFTEST,已授权DB_DEVELOPER_ROLE角色,测试操作均在NFTEST用户下执行。
CREATE TABLE nwc_sales (sale_id NUMBER PRIMARY KEY,product VARCHAR2(30),regionVARCHAR2(30),amountNUMBER,sale_date DATE);INSERT INTO nwc_sales VALUES (1, 'Widget', 'East', 100, DATE'2026-01-15');INSERT INTO nwc_sales VALUES (2, 'Widget', 'West', 150, DATE'2026-01-20');INSERT INTO nwc_sales VALUES (3, 'Gadget', 'East', 200, DATE'2026-02-10');INSERT INTO nwc_sales VALUES (4, 'Gadget', 'West', 120, DATE'2026-02-15');INSERT INTO nwc_sales VALUES (5, 'Widget', 'East',80, DATE'2026-03-01');INSERT INTO nwc_sales VALUES (6, 'Gadget', 'West', 300, DATE'2026-03-05');COMMIT;
image.png
在一个WITH子句中嵌套的WITH子句
代码语言:javascript复制WITH outer_cte AS (WITH inner_cte AS (SELECT product, region, SUM(amount) AS region_totalFROM nwc_salesGROUP BY product, region)SELECT product, SUM(region_total) AS total,MAX(region_total) AS top_region_totalFROM inner_cteGROUP BY product)SELECT product, total, top_region_totalFROM outer_cteORDER BY total DESC;
image.png
3层:
第一级:按产品和区域分类的销售第二级:对产品内的区域进行排名(包含嵌套的WITH语句)代码语言:javascript复制WITH level1 AS (SELECT product, region, SUM(amount) AS region_totalFROM nwc_sales GROUP BY product, region),level2 AS (WITH region_rank AS (SELECT product, region, region_total,RANK() OVER (PARTITIONBY product ORDER BY region_total DESC) AS rnkFROM level1)SELECT product, region, region_total, rnkFROM region_rank)SELECT product, region, region_total,CASEWHEN rnk = 1 THEN'TOP' ELSE 'OTHER' END AS tierFROM level2ORDE RBY product, rnk;
image.png
WITH outer_cte AS (SELECT product, SUM(amount) AS totalFROM nwc_sales GROUP BY product)SELECT sub.product, sub.total, sub.sale_countFROM (WITH inner_cte AS (SELECT product, COUNT(*) AS sale_countFROM nwc_sales GROUP BY product)SELECT o.product, o.total, i.sale_countFROM outer_cte o JOIN inner_cte i ON o.product = i.product) subORDER BY sub.total DESC;
image.png
CREATETABLE nwc_summary (product VARCHAR2(30),total NUMBER,avg_saleNUMBER,num_sales NUMBER);INSERT INTO nwc_summaryWITH product_stats AS (WITH sale_details AS (SELECT product, SUM(amount) AS total, AVG(amount) AS avg_amt, COUNT(*) AS num_salesFROM nwc_sales GROUP BY product)SELECT * FROM sale_details)SELECT product, total, avg_amt, num_sales FROM product_stats;COMMIT;-- 验证数据SELECT product, total, avg_sale, num_salesFROM nwc_summary;
image.png
本期对Oracle AI Database 26ai,23.26.2版本新引入的WITH子句嵌套进行了完整介绍与实战演示。
老规矩,知道写了些啥。
本文参与腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2026-07-06,如有侵权请联系[email protected] 删除