很久沒有寫東西了,因為很久沒有碰到問題了。在一次又一次的覺得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後就會出現未明確定義的列了
似乎目前還沒有辦法