嵌套
嵌套
嵌套,指的是在已有的表格、圖像或圖層中再加進去一個或多個表格、圖像或圖層,亦或兩個物體有裝配關係時,將一個物體嵌入另一物體的方法。
可理解為鑲嵌、套用。在已有的表格、圖像、圖層或函數中再加進去一個或多個表格、圖像、圖層或函數,這種方法就叫做嵌套。
C語言中,所有的執行語句都只能出現在函數之中。同樣,函數的調用也只能出現在某函數的函數體內。函數的調用以兩種方式出現:函數的嵌套與函數的遞歸。
C語言中,所有函數的定義都是互相平行和獨立的,一個函數的定義不能包含另一個函數的定義,即不允許函數的嵌套定義。但函數的調用可以通過用一個函數調用另一個函數來實現,這就形成了函數的嵌套調用!C語言不限制嵌套的個數和層數,這樣我們就可以自由,合理的組織程序的模塊結構。
例:利用公式e=1+1/(1!)+1/(2!)+1/(3!)+1/(4!)+...近似計算自然數e。近似的程度為n。
演演算法按兩層進行:
函數fac_v()計算1/(m!) (m=1,2,3,,,n);
函數cal_e()計算1+1/(1!)+1/(2!)+1/(3!)+1/(4!)+...+1/(n!),作為e的近似值。
函數cal_e()調用fac_v()獲得1/(m!) (m=1,2,3,,,n)的值,而主函數main則調用cal_v()得到自然數e的近似值。
程序如下:
#include
main()
{
double cal_e(int);
int n;
printf("請輸入一個整數:");
scanf("%d",n);
printf("自然數e的近似值為%lf\n",cal_e(n));
}
double cal_e(int n)
{
double fac_v(int);
double e=1.0;
while(n)e+=fac_v(n--);
return(e);
}
double fac_v(int m)
{
double v=1.0;
while(m)v/=m--;
return (v);
}
在上例中每個函數(包括主函數)都很簡單清晰,整個程序執行的流程也很清楚。
嵌套表是表中之表。一個嵌套表是某些行的集合,它在主表中表示為其中的一列。對主表中的每一條記錄,嵌套表可以包含多個行。在某種意義上,它是在一個表中存儲一對多關係的一種方法。考查一個包含部門信息的表,在任何時間內每個部門會有很多項目正在實施。在一個嚴格的關係模型中,將需要建立兩個獨立的表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 animals_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')));
5、查詢嵌套表
select name,birthdate from
table(select animals from breeder);
select name,birthdate from
table(select animals from breeder
where breedername=’mary’)
where name=’dog’;
1、對象復用:如果編寫面向對象的代碼,就提高了重用以前編寫的代碼模塊的機會。同樣,如果創建面向對象的資料庫對象,也就提高了資料庫對象能夠被重用的機會。
2、標準支持:如果創建標準的對象,那麼它們被重用的機會就會提高。如果有多個應用或多個表使用同一資料庫對象集合,那麼它就是既成事實的資料庫對象標準。
3、定義訪問路徑:對於每一個對象,用戶可定義在其上運行的過程和函數,從而可以使數據和訪問此數據的方法聯合起來。有了用這種方式定義的訪問路徑,就可以標準化數據訪問的方法並提高對象的可復用性。