最近在研究connect by的一些基本知識和運行原理,看到有一個sql,會顯示connect by操作記憶體不足,不是很懂這句sql是怎么個邏輯。
with a as (
select 5 as n from dual
union all
select 10 from dual
union all
select 15 from dual
union all
select 20 from dual
)
select * from a where rownum=1 connect by rownum<6;
如果沒有where條件可以理解,加了where就不明白,
有沒有大神可以解釋一下?
uj5u.com熱心網友回復:
這個應該是進入死回圈了uj5u.com熱心網友回復:
http://www.tuicool.com/articles/qUVn2yuj5u.com熱心網友回復:
是因為每次回圈都是rownum=1,所以死回圈了嘛?
uj5u.com熱心網友回復:
我又執行了這個sqlwith a as (
select 5 as n from dual
union all
select 10 from dual
union all
select 15 from dual
union all
select 20 from dual
)
select * from a where rownum<4 connect by level<6;
這一句的where又是篩選最后的結果的。
在這里面,where陳述句到底應該是在每一次回圈作用,還是在最后才作用?
uj5u.com熱心網友回復:
先執行connect by,后執行where
uj5u.com熱心網友回復:
感覺連著用兩個ROWNUM會觸發一個ORACLE的BUGuj5u.com熱心網友回復:
為毛把那個rownum調換位置 看看結果就知道原理了with a as (
select 5 as n from dual
union all
select 10 from dual
union all
select 15 from dual
union all
select 20 from dual
)
select * from a where rownum<6 connect by rownum=1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/115082.html
標籤:開發
上一篇:有關group by 的問題
下一篇:oracle批量更新百萬條資料
