oracle提供了一些内置的函数和方法来操作复合数据类型。
一、count 返回集合中的元素的个数
declare
type ename_table_type is table of varchar2(20) index by binary_integer ;
ename_table ename_table_type ;
begin
for i in 1..5 loop
ename_table(i):='a'||i ;
end loop ;
dbms_output.put_line('元素个数:'||ename_table.count) ;
for c in 1..ename_table.count loop
dbms_output.put_line(ename_table(c)) ;
end loop ;
end ;
二、exists 用于确定集合元素是否存在,如果存在则返回true,否则返回false
SQL> declare
2 type ename_table_type is table of varchar2(20);
3 ename_table ename_table_type ;
4 BEGIN
5 IF ename_table.exists(1) THEN
6 ename_table(1):='scot' ;
7 ELSE
8 dbms_output.put_line('嵌套表使用前要初始化');
9 END if ;
10 end;
11 /
嵌套表使用前要初始化
PL/SQL procedure successfully completed
三、first&last first返回集合第一个元素的下标,last返回集合最后一个元素的下标。
SQL> DECLARE
2 TYPE ename_varray_type IS table OF varchar2(20) INDEX BY binary_integer;
3 ename_varray ename_varray_type ;
4 BEGIN
5 ename_varray(1):='mary' ;
6 ename_varray(4):='scott' ;
7 ename_varray(5):='tiger' ;
8 ename_varray(7):='lucy' ;
9 dbms_output.put_line('第一个元素下标:'||ename_varray.first);
10 dbms_output.put_line('最后个元素下标:'||ename_varray.last);
11 end ;
12 /
第一个元素下标:1
最后个元素下标:7
PL/SQL procedure successfully completed
四、prior&next prior返回当前元素前一个元素的下标,next返回当前元素下一下元素的下标
SQL> DECLARE
2 TYPE ename_varray_type IS table OF varchar2(20) INDEX BY binary_integer;
3 ename_varray ename_varray_type ;
4 BEGIN
5 ename_varray(1):='mary' ;
6 ename_varray(4):='scott' ;
7 ename_varray(5):='tiger' ;
8 ename_varray(7):='lucy' ;
9 dbms_output.put_line('元素5的前一个元素下标:'||ename_varray.prior(5));
10 dbms_output.put_line('元素5的后一个元素下标:'||ename_varray.next(5));
11 end ;
12 /
元素5的前一个元素下标:4
元素5的后一个元素下标:7
PL/SQL procedure successfully completed
五、delete
DECLARE
TYPE ename_varray_type IS table OF varchar2(20) INDEX BY binary_integer;
ename_varray ename_varray_type ;
BEGIN
ename_varray(1):='mary' ;
ename_varray(4):='scott' ;
ename_varray(5):='tiger' ;
ename_varray(6):='lucy' ;
ename_varray(7):='LILI' ;
ename_varray(8):='join' ;
ename_varray(9):='wzj' ;
FOR c IN 1..ename_varray.count LOOP
IF ename_varray.exists(c) then
dbms_output.put_line('下标为'||c||'的值为:'||ename_varray(c));
END IF ;
END loop ;
ename_varray.delete(5);
dbms_output.put_line('删除下标为5的元素之后');
FOR c IN 1..ename_varray.count LOOP
IF ename_varray.exists(c) then
dbms_output.put_line('下标为'||c||'的值为:'||ename_varray(c));
END IF ;
END loop ;
ename_varray.delete(8,9);
dbms_output.put_line('删除下标为8,9的元素之后');
FOR c IN 1..ename_varray.count LOOP
IF ename_varray.exists(c) then
dbms_output.put_line('下标为'||c||'的值为:'||ename_varray(c));
END IF ;
END loop ;
end ;
delete删除所有元素,delete(n)删除下标为n的元素,delete(m,n)删除下标元素在[m,n]中的元素。
六、extend 只用于嵌套表和变长数组,用来扩展元素个数
SQL> DECLARE
2 TYPE ename_varray_type IS varray(10) OF varchar2(20);
3 ename_varray ename_varray_type :=ename_varray_type('');
4 BEGIN
5 FOR c IN 1..9 LOOp
6 ename_varray(c):='a'||c ;
7 ename_varray.extend ;
8 END LOOP ;
9 FOR c IN 1..ename_varray.count LOOP
10 dbms_output.put_line('下标为'||c||'的元素为:'||ename_varray(c));
11 END LOOP ;
12 end ;
13 /
下标为1的元素为:a1
下标为2的元素为:a2
下标为3的元素为:a3
下标为4的元素为:a4
下标为5的元素为:a5
下标为6的元素为:a6
下标为7的元素为:a7
下标为8的元素为:a8
下标为9的元素为:a9
下标为10的元素为:
PL/SQL procedure successfully completed