在Oracle中實現可擴充套件的多級編目結構

2021-08-30 06:54:59 字數 1849 閱讀 4610

一、可擴充套件多級編目的定義

可擴充套件多級編目有下述特點:

編目分級,上下級編目形成父子關係;

任意節點可以有零到多個子節點,任意子節點有且只有乙個父節點;

節點深度在理論上可以無限擴充;

由上述特點可知,可擴充套件多級編目實際上是樹。

二、可擴充套件多級編目的例子

windows作業系統中的檔案路徑是乙個典型的多級編目結構。多級編目結構的例子還有很多:人的家譜、文獻索引、製造業的bom、財務的科目編碼、公司組織結構等。

三、可擴充套件多級編目在oracle中的設計

概念設計:

物理設計:

多級編目表的設計思路跟「樹」的設計思路一樣。id是行的唯一標識,用oracle的序列和觸發器(可參見有關文章)實現自增長。parentid是指向本表的外來鍵,如果該行有父節點則引用本表中父節點行的id,如果該行是根節點則為空。

四、用connect by遍歷多級編目表

用oracle提供的connect by命令可以正序或逆序遍歷多級編目表。正序遍歷的例子:

select id,parentid,name,describe,levelfrom***_class_tab

connectby parentid =prior id

startwith parentid isnull

connect by的標準語法為:

select expression [,expression] …

from [user.] table

where condition

connect by [prior] expression = [ prior ] expression

start with expression = expression

order by expression

start with指定從哪個節點開始遍歷;

connect by 指定父子節點的連線方式,其中prior修飾遍歷的初始節點;

order by 指定排序關鍵字,但是使用order by 會破壞節點的遍歷順序;

connect by 工具允許level關鍵字,level代表節點的深度;

用where可以過濾行,但不影響其關係節點;

用connect by可以過濾行以及該行的關係節點。

五、提高connect by的查詢效率

如果多級編目表的資料較多或層次較多,為了提高查詢效率,可以為多級編目表建立索引。索引的建立取決於connect by子句。上面例子的connect by子句為:

connectby parentid =prior id

這時可以為該錶建立兩個索引,第乙個索引在 parentid和id上建立,第二個索引在id和parentid上建立。這樣無論正序還是逆序遍歷該錶,都會用索引訪問代替全表掃瞄,從而提高查詢效率。

六、排序會打亂多級編目表的遍歷順序

connect by按照深度優先原則進行遍歷,所以儘管使用各種排序的辦法,connect by仍然會將搜尋深度最大的行排在前面。也就是說,在connect by 中使用order by 將得不到正確的遍歷順序。

在ORACLE中實現SELECT TOP N的方法

1.在oracle中實現 select top n 由於oracle 不支援select top 語句,所以在 oracle中經 常是用order by 跟rownum的組 合來實現 select top n的查詢 簡單 地說,實現 方法如下所示 select 列名 列名 from select 列...

在ORACLE中實現SELECT TOP N的方法

1.在oracle中實現select top n 由於oracle不支援select top語句,所以在oracle中經常是用order by跟rownum的組合來實現select top n的查詢。簡單地說,實現方法如下所示 select 列名 列名 from select 列名 列名 from ...

在ORACLE中實現SELECT TOP N的方法

1.在oracle中實現 select top n 由於 oracle 不支援select top 語句,所以在 oracle中經 常是用order by 跟rownum的組 合來實現 select top n的查詢 簡單地 說,實現方法如下所示 select 列名 列名 from select 列...