----------------嵌套表---------------------------
定義——由其沒有最大數目限定的的單維集合,也就是無上限,存放個數無限制,排列是緊密的。
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元素出來
------------------------------------------