很长时间没有碰这些常规任务了,妈蛋 劳资一直在写文档~~~~~~~~~~~~
今天手痒,从测试分支上弄了一个代码写了个分页功能,跟开发人员那要了个任务,然后不亦乐乎的写程序,一开始我的分页是这样写的:
SELECT IN_MNO,
CRD_NO,
TRAN_CD,
TRAN_AMT,
REC_FEE_AMT,
UUID,
TRAN_DT,
TRAN_TM
FROM PTS.T_PTS_TRANDATA
WHERE CRD_NO is not null
and tran_cd in
('10110001', '10110002', '10110005', '10110006', '10110008')
and in_mno ='800027844580005'
and TRAN_DT >= '20141201'
and TRAN_DT <= '20141231'
and rownum > 0
and rownum <= 20
order by TRAN_DT desc, TRAN_TM desc;
妄图通过rownum来分页,事实证明这是不可取的;因为
rownum是查询过后才按顺序排的,假如你的条件是rownum>1;那么返回数据的第一条(rownum是1)就不符合要求了,然后第二条数据变成了现在的第一条,结果这一条rownum又变成1了又不符合要求了,以此类推 就没有返回结果。
如果想分页的话 是把rownum作为子表的一个字段(起个别名)。所以分页的时候是没有小于那一说的。fuck
修正后这样的完爆
select *
from (SELECT A.*,
ROWNUM RN
FROM (
SELECT IN_MNO,
CRD_NO,
TRAN_CD,
TRAN_AMT,
REC_FEE_AMT,
UUID,
TRAN_DT,
TRAN_TM
FROM PTS.T_PTS_TRANDATA
WHERE CRD_NO is not null
and tran_cd in ('10110001',
'10110002',
'10110005',
'10110006',
'10110008')
and in_mno = '800027844580005'
and TRAN_DT >= '20141201'
and TRAN_DT <= '20141231'
order by TRAN_DT desc, TRAN_TM desc
) A
WHERE ROWNUM <= 30
order by TRAN_DT desc, TRAN_TM desc)
WHERE RN > 20;