25.嵌套表

----------------嵌套表---------------------------

定義——由其沒有最大數目限定的的單維集合,也就是無上限,存放個數無限制,排列是緊密的。


1、定義、聲明、初始化

declare

 type num_varray is table of number;

 v_numarray num_varray:=num_varray(10,20,30,40);

begin

 dbms_output.put_line(to_char(v_numarray(1)));

 dbms_output.put_line(to_char(v_numarray(2)));

 dbms_output.put_line(to_char(v_numarray(3)));

 dbms_output.put_line(to_char(v_numarray(4)));

end;


2、null嵌套表和NULL嵌套表元素


和數組是一樣的。


3、訪問嵌套表元素——和數組是一樣的。

--------------------------------------------

集合(數組、嵌套表)的方法


1、exists方法——返回集合中索引對應的位置是否存在,存在返回true,否則就返回false


數組的案例:

declare

 type num_varray is varray(5) of number;

 v_numarray num_varray:=num_varray(10,20,30,40);

begin

 if v_numarray.exists(5) then

   dbms_output.put_line('YES');

 else

   dbms_output.put_line('NO');

 end if;

end;

=======================

2、count方法——返回集合元素的數目

declare

 type num_varray is varray(5) of number;

 v_numarray num_varray:=num_varray(10,20,30,40);

begin

 dbms_output.put_line(to_char(v_numarray.count));

end;

======================

3、limit方法——-只有數組有這個方法,返回數組的元素的最大上限

declare

 type num_varray is varray(5) of number;

 v_numarray num_varray:=num_varray(10,20,30,40);

begin

 dbms_output.put_line(to_char(v_numarray.limit));

end;


輸出:5

========================

4、

first——返回集合中第一個不爲null的元素的索引號,如果集合爲NULL,返回null

last——返回集合中最後一個不爲null的元素的索引號,如果集合爲NULL,返回null


declare

 type num_varray is varray(5) of number;

 v_numarray num_varray:=num_varray(10,20,30,40);

begin

 dbms_output.put_line(to_char(v_numarray.first));

 dbms_output.put_line(to_char(v_numarray.last));

end;


======================

5


next——返回集合中指定元素的下一個已經被初始化的不爲null元素的索引號,如果集合爲NULL,返回null

prior——返回集合中指定元素的前一個已經被初始化的不爲null元素的索引號,如果集合爲NULL,返回null


declare

 type num_varray is varray(5) of number;

 v_numarray num_varray:=num_varray(10,20,30,40);

begin

 dbms_output.put_line(to_char(v_numarray.next(1)));

 dbms_output.put_line(to_char(v_numarray.prior(4)));

end;


6、extend方法——在集合的末尾處添加新元素或者在末尾新初始化元素(可以是null)

declare

 type num_varray is varray(200) of number;

 v_numarray num_varray:=num_varray(null,null);

begin

 dbms_output.put_line(to_char(v_numarray.count));

 v_numarray(1):=1001;

 v_numarray(2):=1002;

 v_numarray.extend;  --在集合的末尾處添加一個null元素

 dbms_output.put_line(to_char(v_numarray.count));

 v_numarray(3):=1003;

 v_numarray.extend(5);  --在集合的末尾處添加5個null元素

 dbms_output.put_line(to_char(v_numarray.count));

 v_numarray(8):=1008;

 v_numarray.extend(5,8);  --在集合的末尾處添加5個在索引8處一樣值的元素

 dbms_output.put_line(to_char(v_numarray.count));

 for i in 1..v_numarray.count loop

   dbms_output.put_line(nvl(to_char(v_numarray(i)),'NULL'));

 end loop;

end;


輸出:

2

3

8

13

1001

1002

1003

NULL

NULL

NULL

NULL

1008

1008

1008

1008

1008

1008


和index-by一樣,元素位置給過值null的話是可以輸出的,但是沒有初始化過是不能訪問的。


7、trim方法——在集合的末尾處刪除元素

declare

 type num_varray is varray(200) of number;

 v_numarray num_varray:=num_varray(null,null);

begin

 dbms_output.put_line(to_char(v_numarray.count));

 v_numarray(1):=1001;

 v_numarray(2):=1002;

 v_numarray.trim;    --在集合末尾刪除一個元素

 dbms_output.put_line(to_char(v_numarray.count));

 v_numarray.extend;

 v_numarray(2):=1003;

 v_numarray.trim(2);  --在集合末尾刪除2個元素

 dbms_output.put_line(to_char(v_numarray.count));

 v_numarray.extend(2);

 v_numarray(1):=10081;

 v_numarray(2):=10082;

 dbms_output.put_line(to_char(v_numarray.count));

end;



8、delete方法——從嵌套表中刪除元素(老師認爲有bug!)

declare

 type num_varray is table of number;

 v_numarray num_varray:=num_varray(null,null,null,null,null);

begin

 v_numarray(1):=1001;

 v_numarray(2):=1002;

 v_numarray.delete; --刪除全部的元素

 dbms_output.put_line(to_char(v_numarray.count));

 v_numarray.extend(2);

 v_numarray(1):=10081;

 v_numarray(2):=10082;

 v_numarray.delete(2); --刪除索引位置2的元素

 dbms_output.put_line(to_char(v_numarray.count));

 v_numarray.extend(2);

 dbms_output.put_line(to_char(v_numarray.count));  --3

 v_numarray(2):=810082;

 v_numarray(3):=810083;

 dbms_output.put_line(to_char(v_numarray.count));  --爲什麼變成4了?

 for i in 1..4 loop

   dbms_output.put_line(nvl(to_char(v_numarray(i)),'NULL')); ---nvl函數 判斷如果爲空就輸出NULL

 end loop;

end;


輸出:

0

1

3

4

10081

810082

810083

NULL    --爲什麼給2和3位置賦值,會括出一個NULL元素出來

------------------------------------------









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章