很久没有写东西了,因为很久没有碰到问题了。在一次又一次的觉得Oracle的万能分页很爽以外,今天终于碰到了一个问题。
oracle可以sql语句为参数,拼成万能分页sql
"select * from ( select row_.*, rownum rownum_ from ( "+sql" ) row_ where
rownum <= ?) where rownum_ > ?"
Oracle采用嵌套3层的查询语句结合rownum来实现分页,这在Oracle上是最快的方式,
如果只是一层或者两层的查询语句的rownum不能支持order by。
例如:
sql=select * from admin
拼成select * from ( select row_.*, rownum rownum_ from ( select * from admin) row_ where
rownum <= 110) where rownum_ > 100
没问题
但今天碰上一条自递归的父子结点表就有问题了。
dept表结构如下
deptid parentid name
1 0 直属大队
2 1 直属大队一中队
入口sql=
select
p.tb_parkingbus_id id,
p.tb_eventinfo_id,
p.ajbh,
t.bustypename,
r.resultname,
.....
dept.dept_name,
deptoffice.dept_name
from tb_parkingbus p, '车辆表
tb_cfgbustype t, '车辆类型表
tb_cfgbusresult r, '车辆处理结果表
dept, '一级部门表
dept deptoffice '二级部门表
where t.bustypecode = p.bustypecode and r.result = p.result and p.sts='A' and dept.dept_id = p.dept_id
and dept.parentid= deptoffice.dept_id //二级部门父结点ID=一级部门ID
and
p.dept_id ='30000'
order by p.ajbh desc
这条sql本身没有问题。可以正常执行但是代入万能分页sql后就会出现未明确定义的列了
似乎目前还没有办法