我有一个oracle查询,如下所示,但是当我对分页进行更改时,结果是不同的。
SELECT *
FROM (
SELECT b.*,
ROWNUM r__
FROM (
select a.KODE_KLAIM,
a.NO_SS,
a.LA,
a.NAMA_TK,
a.KODE_K,
(
select tk.TEM_LAHIR
from KN.VW_KN_TK tk
where tk.KODE_K = a.KODE_K and rownum=1
) TEM_LAHIR,
(
select TO_CHAR(tk.TLAHIR, 'DD/MM/RRRR')
from KN.VW_KTK tk
where tk.KODE_K = a.KODE_K
and rownum=1
) TLAHIR
from PN.KLAIM a
where nvl(a.STATUS_BATAL,'X') = 'T'
and A.NOMOR IS NOT NULL
and A.TIPE_KLAIM = 'JPN01'
)b
)
where 1 = 1
WHERE ROWNUM < ( ( ? * ? ) + 1 )
WHERE r__ >= ( ( ( ? - 1 ) * ? ) + 1 )
但是我运行了这个查询,结果是ORA-00900:无效的SQL语句
1条答案
按热度按时间8i9zcol21#
结尾有三个
WHERE
子句(没有ORDER BY
子句)。要使其语法有效,可以将第二个和第三个WHERE
子句更改为AND
。但是,您提到了分页,因此您可能希望用途:
或者,如果您使用的是Oracle 12或更高版本,则可以使用
OFFSET x ROWS FETCH FIRST y ROWS ONLY
语法:此外,您还有几个相关子查询,例如:
这将查找SQL引擎碰巧从数据文件中读取的第一个匹配行,并且实际上是查找随机行。如果需要特定行,则需要
ORDER BY
子句,并且需要使用ROWNUM
AFTER(在应用ORDER BY
子句之后)进行筛选。在Oracle 12中,相关子查询将是: