定義巢狀表

2021-06-18 10:01:43 字數 2082 閱讀 6975

巢狀表是對索引表的擴充套件,與索引表最大的不同在於巢狀表可以儲存到oracle資料庫表中,

而索引表僅僅是記憶體表。而且,巢狀表必須使用其構造方法對巢狀表進行初始化。巢狀表

沒有index by子句,這個與索引表直接最明顯的區別,因為巢狀表必須用有序的關鍵字建立,

而且關鍵字不能為負數。

索引表7369  null 7521  7566  7902  7788

1     2    -5    120   key1  10

下標可以為正數,負數或字串

巢狀表7369  null 7521  7566  7902  7788

1     2    3     4     5     6   

下標必須為有序型別,不可以為負數,只能從1開始

高階語言陣列

7369  null 7521  7566  7902  7788

1     2    3     4     5     6

下標只能為從0或1開始的連續數字

巢狀表的定義語法:

type type_naem as table of element_type[not null]

語法中各個部分的含義如下所示:

element_name:不超過30字元。

element_type:用於指定巢狀表元素的資料型別,可以是使用者定義的物件型別,也可以是

使用%type的表達好似,但是不可以是boolean,nchar,nclob,nvarchar2或ref cursor.

當使用巢狀表元素時,必須首先使用構造語法初始化巢狀表。

8.2.5

操縱巢狀表

由於在巢狀表使用之前必須進行構造,為構造的巢狀表被自動地賦初始值null,這與索引表不同,索引表

只是一種程式上的結構,而巢狀表是一種物件的型別,儘管他們都是pl/sql表型別,但是在結構上有明顯

的區別。

注:可以通過is null來判斷巢狀表是否已經被構造來使用巢狀表。

巢狀表的初始化與訪問。

declare

type emp_name_table is table of varchar2(20);--員工名稱巢狀表

type deptno_table is table of number(2);--部門編號巢狀表

deptno_info deptno_table;

emp_name_info emp_name_table := emp_name_table('張小3','李斯特');

begin

dbms_output.put_line('員工1:'||emp_name_info(1));--訪問巢狀表元素

dbms_output.put_line('員工2:'||emp_name_info(2));--訪問巢狀表元素

if deptno_info is null

then

deptno_info := deptno_table();

end if;

deptno_info.extend(5);--擴充元素的個數

for i in 1 .. 5 loop

deptno_info(i):=i*10

end loop;

--顯示部門個數

dbms_output.put_line('部門個數:'||deptno_info.count);8

end;

emp_name_info表在定義時使用了建構函式進行初始化,因為在建構函式中指定了兩個元素,

根據巢狀表下標從1開始的原則,可以通過emp_name_info(1)和emp_name_info(2)訪問這

兩個元素。

deptno_info 首先通過is null判斷該巢狀表是否使用建構函式進行過初始化,然後呼叫構造

函式初始化deptno_info巢狀表,在這裡並沒有在建構函式中新增任何元素,這表示巢狀表中

沒有任何元素,意思是指在巢狀表中沒有預留任何記憶體空間來放置元素。如果為巢狀表中的

元素賦初值,oracle會觸發異常。

未分配元素並不表示元素已存在,為了向deptno_info巢狀表中插入元素,必須首先使用

巢狀表的extend方法擴充指定的元素個數,然後才能通過下標進行訪問。

類的巢狀定義

直接寫乙個例子了解一下類的巢狀定義 include using namespace std define r 10 class stack void push int dt intpop class inside int main 程式相當於建立了乙個棧,類中定義了進棧和出棧,巢狀類返回棧已經存入的...

函式的巢狀定義

函式的巢狀定義 在函式內部定義函式 誕生的理由 乙個函式想使用另乙個函式內部的變數,可以定義在其內部 def func a 10 def fn print a return fn new fn func new fn global關鍵字 統一區域性與全域性的變數名 a 100 def fn1 glo...

Python 函式 定義,巢狀,引數

定義函式 使用def 函式名 def say hello print hello1 print hello2 print hello3 say hello 使用函式名呼叫函式,如果不呼叫則不會輸出結果 系統自動跳過函式 結果 hello1 hello2 hello3def sum num1 20 n...