使用PL Sql查詢具有層次連線的資料

2021-03-31 08:56:58 字數 643 閱讀 4363

場景分析:在專案開發時,遇到了這樣一種情況:對指定機關單位的月結資料進行統計時,需要包括下級所有單位的資料。可是機關單位的層次是多級的,如:省級——市級——區縣級——街道。

而我的表tbl1結構設計是

機關**(jg) 業務資料列1(a) 業務資料列2(b) …

機關表tbl2設計如下:

機關**(jg) 上級機關(sj) …

要是傳遞乙個當前機關**,通過乙個sql語句查詢出當前機關和所有下級機關資料就好了。用的資料庫是oracle,開始我採取的方式是,程式先通過遞迴獲得當前機關和所有下級機關的集合,然後拼sql用in子句查詢。這樣雖可以解決問題,可我總覺得彆扭。後來發現oracle的pl/sql原來可以查詢出這種多層次資料。

如下(假設當前稅務機關變數值為1234):

sleect sum(a), sum(b) from tbl1 where tbl1.jg in ( select jg from tbl2 where tbl2.sj = '1234' or (tbl2.jg in (select tbl2.sj from tbl2 start with tbl2.sj ='1234' connect by tbl2.sj = prior tbl2.jg)) )

通過乙個並不算複雜的sql語句就解決了問題,避免了兩次訪問資料庫。

Oracle的層次查詢及層次查詢與自連線的比較

首先我們要引入自連線和層次查詢的概念 自連線 利用表名的別名,將同一張表視為多張表。層次查詢 對同一張表的前後兩次操作,進行連線。自連線缺點 自連線不太適合操作大表。解決方案 利用層次查詢。通過上圖可以看出各個資料之間的層次關係,level有4級,現在我們通過sql來實現這一關係 例如 查詢員工資訊...

不安裝oracle,使用plsql連線oracle

通常企業開發時,資料庫是不會在我們本地安裝的 廢話 所以使用plsql時,沒必要的話,我們盡量不去安裝oracle,太大了 接下來說一下本人plsql,不安裝oracle的使用步驟 1.個人本地環境 os win10 未安裝oracle 3.建立乙個目錄存放instantclient 可以本人的為例...

使用PL SQL連線別人的Oracle

2 d instantclient 11 2目錄下新建目錄network,在network目錄下再新建目錄admin,在admin目錄下新建tnsnames.ora,myoracle description address protocol tcp host 172.16.1.4 port 1521...