Oracle踩坑(使用Navicat12)
一. 分页问题
1. 一开始想用ROWNUM关键字做大小判断来分页,发现实现不了,>号或者BETWEEN AND都无法正确获取数据,只能通过<获取前几条数据
(ROWNUM不匹配>,BETWEEN AND如AND前的数字大于0也是一个道理)
2. 只能<号,那么倒序试试,发现还是不行。很坑的一处:看起来像是里层先ORDER BY再WHERE,外层则先WHERE。
真是奇葩(怀疑是:ROWNUM相当于全局变量,第一次使用后就固定值了)
SELECT * FROM(
Select *
From TABLE
WHERE ROWNUM < 20
ORDER BY CODE )
WHERE ROWNUM < 10
ORDER BY CODE DESC
3. 网上看到这个可以,里层把ROWNUM作为参数,外层就可以使用>号了。
SELECT * FROM (SELECT *,ROWNUM AS RM
FROM DIC_OCCUPATION_CODE
WHERE ROWNUM <= 20
ORDER BY CODE
) WHERE RM > 10
但是,这里又有一个坑:*号和ROWNUM是不能直接一起用的
一个一个敲字段,或者使用别名(如A.*,ROWNUM),否则报错:FROM keyword not found where expected
4. 感觉涉及到ROWNUM就都特别的难搞
比如排序失效:
1)order by 后面是索引 走索引查询 是线性顺序
2)order by 不是索引 走全表查询 查到哪里是哪里 非线性