濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > oracle sys_connect_by_path 函數(shù) 結(jié)果集連接

oracle sys_connect_by_path 函數(shù) 結(jié)果集連接

熱門(mén)標(biāo)簽:淮安自動(dòng)外呼系統(tǒng)開(kāi)發(fā) 廣州市400電話辦理 修改高德地圖標(biāo)注 語(yǔ)音電話機(jī)器人營(yíng)銷(xiāo)方案 地圖標(biāo)注原件 百變地圖標(biāo)注 宜賓外呼系統(tǒng)廠家 語(yǔ)音電話機(jī)器人缺點(diǎn) 南通防封外呼系統(tǒng)運(yùn)營(yíng)商
以前看過(guò)有人轉(zhuǎn)換過(guò)的,當(dāng)時(shí)僅僅驚嘆了一下,就過(guò)去了,沒(méi)有記下來(lái),直至于用到的時(shí)候呢,開(kāi)始到處找,找來(lái)找去都沒(méi)有找不到痕跡了,心里也就郁郁寡歡呀。
今天無(wú)意間,看connect by的使用,看到了sys_connect_by_path的用法,算是給我一個(gè)另類(lèi)的驚喜了,sys_connect_by_path(columnname, seperator) 也可以拼出串來(lái),不過(guò)這個(gè)函數(shù)本身不是用來(lái)給我們做這個(gè)結(jié)果集連接用的,而是用來(lái)構(gòu)造樹(shù)路徑的,所以需要和connect by一起來(lái)用。
呵呵呵,在這里囂張了一把,基于對(duì)oracle的一些函數(shù)的了解的基礎(chǔ)上,看我是怎樣硬生生的把一個(gè)沒(méi)有樹(shù)結(jié)構(gòu)的普通表或者結(jié)果集做出我們想要的東西來(lái)。
magic is start.
道具,一個(gè)普通表,就一個(gè)字段 name, 姑且叫表名為test_sysconnectbypath吧,表名太長(zhǎng),嘻嘻,不怕,別名之。
以下為該表數(shù)據(jù)

NAME
------------------
深圳
武漢
上海
北京
天津
新加坡

別名之
SQL>with temp as (select name form test_sysconnectbypath);
這是別名的寫(xiě)法,我們下面的sql語(yǔ)句就可以用temp來(lái)代替這個(gè)結(jié)果集。當(dāng)然這個(gè)()里面可以是你自己的復(fù)雜查詢(xún)出來(lái)的結(jié)果集也行
第一變性開(kāi)始,把這個(gè)變成有樹(shù)形結(jié)構(gòu)的
怎么才能變形成樹(shù)結(jié)構(gòu)了,大家馬上想到,加一個(gè)pid,和id才行喲,這里沒(méi)有,我們就給他們加上吧。不過(guò),加了id,怎么來(lái)填他們的結(jié)構(gòu)數(shù)據(jù)呢,這里需要另一個(gè)函數(shù)顯圣了 lag() , lag() 是取前記錄, 和lead相對(duì), 如果是簡(jiǎn)單的拼的話,樹(shù)結(jié)構(gòu)不就是,上一條記錄就是下一條記錄的父節(jié)點(diǎn)了么
這樣我們用rownum,不就.... OK了
action
select t.name, no, lag(no) over(order by no) pid from (select temp.*, rownum no from temp) t;
結(jié)果出來(lái)了

NAME NO PID
-------------------- ---------- ----------

深圳 1
武漢 2 1
上海 3 2
北京 4 3
天津 5 4
新加坡 6 5

現(xiàn)在就是個(gè)樹(shù)形了吧。
再變樹(shù)
action
select * from (select t.name, no, lag(no) over(order by no) pid from (select temp.*, rownum no from temp)) t start with pid is null connect by prior no=pid;
看看結(jié)果吧

結(jié)果出來(lái)了
NAME NO PID
-------------------- ---------- ----------
深圳 1
武漢 2 1
上海 3 2
北京 4 3
天津 5 4
新加坡 6 5

奇怪結(jié)果沒(méi)有變喲,是的,這里只是把樹(shù)給選出來(lái)了,你如果加個(gè)lpad(' ', 4*level, '*')||name就可以看出端倪了
最后一變,拼成串
select sys_connect_by_path(name. ',') text from (select t.name, no, lag(no) over(order by no) pid from (select temp.*, rownum no from temp)) t start with pid is null connect by prior no=pid;
你們自己看結(jié)果吧。
Text
--------------------------------------------------

深圳,武漢,上海,北京,天津,新加坡

......
呵呵呵,雖然是做出來(lái)來(lái),但是就像上面說(shuō)講的,這里只是另類(lèi)的喜悅,因?yàn)檫@個(gè)不是我以前看到的那個(gè)解決方案,不過(guò)是通過(guò)這個(gè)方法,有用到了強(qiáng)大的connect by已經(jīng)分析函數(shù)over,僅是竊喜,
找尋工作還要繼續(xù),什么時(shí)候才很然給我撥開(kāi)云霧找到你喲。
您可能感興趣的文章:
  • window中oracle環(huán)境變量設(shè)置方法分享
  • 安裝Oracle時(shí)出現(xiàn)環(huán)境變量Path的值大于1023的解決辦法

標(biāo)簽:池州 南平 南平 襄陽(yáng) 聊城 通化 股票投資 嘉峪關(guān)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《oracle sys_connect_by_path 函數(shù) 結(jié)果集連接》,本文關(guān)鍵詞  oracle,sys,connect,path,函數(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《oracle sys_connect_by_path 函數(shù) 結(jié)果集連接》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于oracle sys_connect_by_path 函數(shù) 結(jié)果集連接的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    徐州市| 平乡县| 温宿县| 汉沽区| 舟曲县| 渝北区| 泗洪县| 巩留县| 沈阳市| 永新县| 綦江县| 西乌珠穆沁旗| 镇江市| 孟州市| 金沙县| 图木舒克市| 红河县| 正定县| 定兴县| 长兴县| 澄迈县| 黔江区| 山东省| 梓潼县| 凉山| 赤峰市| 南京市| 城市| 桃园县| 濮阳县| 富锦市| 九龙县| 长葛市| 任丘市| 湖南省| 定襄县| 项城市| 阿合奇县| 巴东县| 龙里县| 冕宁县|