You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PL/SQL中使用CTE与Row Number函数遇ORA-00923错误的原因咨询

ORA-00923错误原因及修复方案

错误原因

你遇到的ORA-00923错误,核心原因是Oracle SQL不支持在SELECT子句中同时使用*通配符和显式定义的计算列。你的SQL第3行写了SELECT *, row_number()...,这种写法在部分数据库(如MySQL)中可行,但Oracle的语法规则不允许——在多表连接场景下,Oracle无法解析*后紧跟的额外列,因此抛出"FROM关键字未在预期位置出现"的错误。

修复后的SQL

将*替换为具体表的所有列(用表别名限定),示例如下:

WITH cte2 AS (
    SELECT
        a.*, b.*, row_number() over (order by a.v_prt_nbr_spr) as rw_number
    FROM
        cf_active_pn_master a
        INNER JOIN cf_conn_support b ON a.obj_id = b.obj_id
    WHERE
        a.v_prt_nbr_spr LIKE 'HQCD%'
)
SELECT *
FROM cte2
where rw_number between 5000 and 10000;

如果不需要两个表的全部字段,更推荐明确列出需要的字段,既符合Oracle语法,也能提升查询效率:

WITH cte2 AS (
    SELECT
        a.obj_id, a.v_prt_nbr_spr, -- 替换为你实际需要的a表字段
        b.your_column1, b.your_column2, -- 替换为你实际需要的b表字段
        row_number() over (order by a.v_prt_nbr_spr) as rw_number
    FROM
        cf_active_pn_master a
        INNER JOIN cf_conn_support b ON a.obj_id = b.obj_id
    WHERE
        a.v_prt_nbr_spr LIKE 'HQCD%'
)
SELECT *
FROM cte2
where rw_number between 5000 and 10000;

内容的提问来源于stack exchange,提问作者Vishal Mishr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:34:55