我知道这是不常规的,但我需要按行号选择数据(因为这是错误报告给我们的反馈)。
这是我想出的SQL,但它不工作。我确实从一个MYSQL查询开始,那确实有效,并通过一个转换器,因为我对Oracle的语法不是很了解。
SELECT *
FROM (
SELECT ACCOUNTID, ACCOUNT_SSN, AGENTCODEID, @curRow := FROM dual @curRow + 1 AS row_number
FROM
agent_code_details_stage_0808
JOIN (
SELECT <<@curRow>> = 0
) r
) sub
WHERE sub.row_number = 78 or
sub.row_number = 277
更新:当我们打开表时,没有指定 "顺序",但系统显示的是行号。我相信我们使用的是SQL Developer。我再检查一下,看看是否有一个默认的列,它的排序。
有没有一种方法可以不需要顺序就能写出来?大多数数据库都是固有的顺序,因为新的数据被写入它。因此,我需要按创建时的行来拉(表中没有数据供我比较或排序),把它看作是一个日志文件,而不是数据库。我收到一封电子邮件,告诉我数据中有一行失败了,我需要能够在DB中找到那行,以找出失败的原因。
Oracle有 row_number()
:
SELECT acd.*
FROM (SELECT acd.*,
ROW_NUMBER() OVER (ORDER BY ?) as seqnum
FROM agent_code_details_stage_0808 acd
) acd
WHERE sub.row_number IN (78, 277);
有一点需要注意的是,SQL表代表的是: 无序 集。 一般来说,在SQL表中是没有第78行这回事的。 当按以下方式排序时,只有第78行。东西. 该 ?
是为指定排序的列。