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