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 不是索引 走全表查询 查到哪里是哪里 非线性

 

posted @ 2020-08-06 15:28  DoKey713  阅读(227)  评论(0编辑  收藏  举报