PL/SQL 中的行号函数

问题描述 投票:0回答:1

我正在尝试使用 cte 和行号函数从表中获取特定数量的记录。每当我运行查询时,我都会收到有关查询中“FROM”子句位置的错误。 请提出此错误背后的原因,因为我是 Sql 的新手。

错误:

ORA-00923: 在预期位置找不到 FROM 关键字 00923. 00000 - “在预期位置找不到 FROM 关键字” 原因:
动作: 行错误:3 列:10

代码:

WITH cte2 AS (
    SELECT
        *, 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 plsql row-number
1个回答
1
投票

要将

*
与添加到您的
SELECT
列表中的任何其他内容一起使用,您必须为
*
:

添加别名
WITH cte2 AS (
    SELECT
        a.*, row_number() over (order by a.v_prt_nbr_spr) as rw_number
    FROM cf_active_pn_master a . . .

如果您同时想要

a
b
列,则必须至少列出其中一个,因为
a.*,b.*
会返回重复的
obj_id
列,而这在作为另一个视图的查询块中是不允许的堵塞。所以:

WITH cte2 AS (
    SELECT
        a.*, 
        b.col1,
        b.col2,
        b.col3,
        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 
        . . .
© www.soinside.com 2019 - 2024. All rights reserved.