用法
嵌套表是表中之表。一個嵌套表是某些行的集合,它在主表中表示為其中的一列。對主表中的每一條記錄,嵌套表可以包含多個行。在某種意義上,它是在一個表中存儲一對多關係的一種方法。考查一個包含部門信息的表,在任何時間內每個部門會有很多項目正在實施。在一個嚴格的關係模型中,將需要建立兩個獨立的表department和project。
嵌套表允許在department表中存放關於項目的信息。勿需執行聯合操作,就可以通過department表直接訪問項目表中的記錄。這種不經聯合而直接選擇數據的能力使得用戶對數據訪問更加容易。甚至在並沒有定義方法來訪問嵌套表的情況下,也能夠很清楚地把部門和項目中的數據聯繫在一起。在嚴格的關係模型中,department和project兩個表的聯繫需要通過外部關鍵字(外鍵)關係才能實現。
使用方法
假設有一個關於動物飼養員的表,希望其中具有他們飼養的動物的信息。用一個嵌套表,就可以在同一個表中存儲飼養員和其飼養的全部動物的信息。
1、創建類型animal_ty:此類型中,對於每個動物都包含有一個記錄,記載了其品種、名稱和出生日期信息。
CREATE TYPE animal_ty AS OBJECT (breed varchar2(25),name varchar2(25),birthdate date);
2、創建animals_nt:此類型將用作一個嵌套表的基礎類型。
CREATE TYPE animal_nt as table of animal_ty;
3、創建表breeder:飼養員的信息表
create table breeder(breedername varchar2(25),animals animal_nt)nested table animals store as animals_nt_tab;
4、向嵌套表中插入記錄
insert into breeder values('mary',animal_nt(animal_ty('dog','butch','31-MAR-97'),animal_ty('dog','rover','31-MAR-97'),animal_ty('dog','julio','31-MAR-97')));
insert into breeder values('jane',animal_nt(animal_ty('cat','an','31-MAR-97'),animal_ty('cat','jame','31-MAR-97'),animal_ty('cat','killer','31-MAR-97')));commit;
5、查詢嵌套表
select name,birthdate from table(select animals from breeder);
當嵌套表中存在多行數據時,必須加上where條件,否則會查詢失敗提示
select name,birthdate from table(select animals from breeder where breedername=’mary’)where name=’dog’;
特點
1、對象復用:如果編寫面向對象的代碼,就提高了重用以前編寫的代碼模組的機會。同樣,如果創建面向對象的資料庫對象,也就提高了資料庫對象能夠被重用的機會。
2、標準支持:如果創建標準的對象,那么它們被重用的機會就會提高。如果有多個套用或多個表使用同一資料庫對象集合,那么它就是既成事實的資料庫對象標準。
3、定義訪問路徑:對於每一個對象,用戶可定義在其上運行的過程和函式,從而可以使數據和訪問此數據的方法聯合起來。有了用這種方式定義的訪問路徑,就可以標準化數據訪問的方法並提高對象的可復用性。