oracle集合型別使用的實驗.TXT
集合使用的小實驗
1.可變陣列
(1)顯示可變陣列中的內容
SQL> declare
2 type stud_varray_t is varray(10) of varchar2(100);
3 stud_varray stud_varray_t:=stud_varray_t();
4 i number:=1;
5 begin
6 stud_varray.extend(10);
7 stud_varray(1):='ab1';
8 stud_varray(2):='ab2';
9 stud_varray(3):='ab3';
10 stud_varray(4):='ab4';
11 stud_varray(5):='ab5';
12 stud_varray(6):='ab6';
13 stud_varray(7):='ab7';
14 stud_varray(8):='ab8';
15
16 while stud_varray.exists(i)
17 loop
18 dbms_output.put_line(stud_varray(i));
19 i:=i+1;
20 end loop;
21 end;
22 /
(1)顯示可變陣列中的內容
SQL> declare
2 type stud_varray_t is varray(10) of varchar2(100);
3 stud_varray stud_varray_t:=stud_varray_t();
4 i number:=1;
5 begin
6 stud_varray.extend(10);
7 stud_varray(1):='ab1';
8 stud_varray(2):='ab2';
9 stud_varray(3):='ab3';
10 stud_varray(4):='ab4';
11 stud_varray(5):='ab5';
12 stud_varray(6):='ab6';
13 stud_varray(7):='ab7';
14 stud_varray(8):='ab8';
15
16 while stud_varray.exists(i)
17 loop
18 dbms_output.put_line(stud_varray(i));
19 i:=i+1;
20 end loop;
21 end;
22 /
ab1
ab2
ab3
ab4
ab5
ab6
ab7
ab8
ab2
ab3
ab4
ab5
ab6
ab7
ab8
PL/SQL procedure successfully completed
(2)確認未賦值的(預設為NULL)的元素是否顯示了
SQL>
SQL> declare
2 type stud_varray_t is varray(10) of varchar2(100);
3 stud_varray stud_varray_t:=stud_varray_t();
4 i number:=1;
5 begin
6 stud_varray.extend(10);
7 stud_varray(1):='ab1';
8 stud_varray(2):='ab2';
9 stud_varray(3):='ab3';
10 stud_varray(4):='ab4';
11 stud_varray(5):='ab5';
12 stud_varray(6):='ab6';
13 stud_varray(7):='ab7';
14 stud_varray(8):='ab8';
15
16 while stud_varray.exists(i)
17 loop
18 dbms_output.put_line(stud_varray(i));
19 dbms_output.put_line(i);
20 i:=i+1;
21 end loop;
22 end;
23 /
ab1
1
ab2
2
ab3
3
ab4
4
ab5
5
ab6
6
ab7
7
ab8
8
1
ab2
2
ab3
3
ab4
4
ab5
5
ab6
6
ab7
7
ab8
8
9
10
PL/SQL procedure successfully completed
(3)使用trim方法將末尾的元素刪除
SQL>
SQL> declare
2 type stud_varray_t is varray(10) of varchar2(100);
3 stud_varray stud_varray_t:=stud_varray_t();
4 i number:=1;
5 begin
6 stud_varray.extend(10);
7 stud_varray(1):='ab1';
8 stud_varray(2):='ab2';
9 stud_varray(3):='ab3';
10 stud_varray(4):='ab4';
11 stud_varray(5):='ab5';
12 stud_varray(6):='ab6';
13 stud_varray(7):='ab7';
14 stud_varray(8):='ab8';
15 stud_varray.trim;
16 while stud_varray.exists(i)
17 loop
18 dbms_output.put_line(stud_varray(i));
19 dbms_output.put_line(i);
20 i:=i+1;
21 end loop;
22 end;
23 /
SQL>
SQL> declare
2 type stud_varray_t is varray(10) of varchar2(100);
3 stud_varray stud_varray_t:=stud_varray_t();
4 i number:=1;
5 begin
6 stud_varray.extend(10);
7 stud_varray(1):='ab1';
8 stud_varray(2):='ab2';
9 stud_varray(3):='ab3';
10 stud_varray(4):='ab4';
11 stud_varray(5):='ab5';
12 stud_varray(6):='ab6';
13 stud_varray(7):='ab7';
14 stud_varray(8):='ab8';
15 stud_varray.trim;
16 while stud_varray.exists(i)
17 loop
18 dbms_output.put_line(stud_varray(i));
19 dbms_output.put_line(i);
20 i:=i+1;
21 end loop;
22 end;
23 /
ab1
1
ab2
2
ab3
3
ab4
4
ab5
5
ab6
6
ab7
7
ab8
8
1
ab2
2
ab3
3
ab4
4
ab5
5
ab6
6
ab7
7
ab8
8
9
PL/SQL procedure successfully completed
(4)trim刪除多個元素
SQL>
SQL> declare
2 type stud_varray_t is varray(10) of varchar2(100);
3 stud_varray stud_varray_t:=stud_varray_t();
4 i number:=1;
5 begin
6 stud_varray.extend(10);
7 stud_varray(1):='ab1';
8 stud_varray(2):='ab2';
9 stud_varray(3):='ab3';
10 stud_varray(4):='ab4';
11 stud_varray(5):='ab5';
12 stud_varray(6):='ab6';
13 stud_varray(7):='ab7';
14 stud_varray(8):='ab8';
15 stud_varray.trim(5);
16 while stud_varray.exists(i)
17 loop
18 dbms_output.put_line(stud_varray(i));
19 dbms_output.put_line(i);
20 i:=i+1;
21 end loop;
22 end;
23 /
ab1
1
ab2
2
ab3
3
ab4
4
ab5
5
1
ab2
2
ab3
3
ab4
4
ab5
5
PL/SQL procedure successfully completed
(5)所給下標超過陣列中的元素數量時會報錯
SQL> declare
2 type stud_varray_t is varray(10) of varchar2(100);
3 stud_varray stud_varray_t:=stud_varray_t();
4 i number:=1;
5 begin
6 stud_varray.extend(10);
7 stud_varray(1):='ab1';
8 stud_varray(2):='ab2';
9 stud_varray(3):='ab3';
10 stud_varray(4):='ab4';
11 stud_varray(5):='ab5';
12 stud_varray(6):='ab6';
13 stud_varray(7):='ab7';
14 stud_varray(8):='ab8';
15 stud_varray.trim(50);
16 while stud_varray.exists(i)
17 loop
18 dbms_output.put_line(stud_varray(i));
19 dbms_output.put_line(i);
20 i:=i+1;
21 end loop;
22 end;
23 /
SQL> declare
2 type stud_varray_t is varray(10) of varchar2(100);
3 stud_varray stud_varray_t:=stud_varray_t();
4 i number:=1;
5 begin
6 stud_varray.extend(10);
7 stud_varray(1):='ab1';
8 stud_varray(2):='ab2';
9 stud_varray(3):='ab3';
10 stud_varray(4):='ab4';
11 stud_varray(5):='ab5';
12 stud_varray(6):='ab6';
13 stud_varray(7):='ab7';
14 stud_varray(8):='ab8';
15 stud_varray.trim(50);
16 while stud_varray.exists(i)
17 loop
18 dbms_output.put_line(stud_varray(i));
19 dbms_output.put_line(i);
20 i:=i+1;
21 end loop;
22 end;
23 /
ORA-06533: 下標超出數量
ORA-06512: 在 line 15
ORA-06512: 在 line 15
(6)用limit方法顯示集合的最大元素數量
SQL> declare
2 type stud_varray_t is varray(10) of varchar2(100);
3 stud_varray stud_varray_t:=stud_varray_t();
4 i number:=1;
5 begin
6 stud_varray.extend(10);
7 stud_varray(1):='ab1';
8 stud_varray(2):='ab2';
9 stud_varray(3):='ab3';
10 stud_varray(4):='ab4';
11 stud_varray(5):='ab5';
12 stud_varray(6):='ab6';
13 stud_varray(7):='ab7';
14 stud_varray(8):='ab8';
15 stud_varray.delete;
16
17 dbms_output.put_line(stud_varray.limit);
18 end;
19 /
SQL> declare
2 type stud_varray_t is varray(10) of varchar2(100);
3 stud_varray stud_varray_t:=stud_varray_t();
4 i number:=1;
5 begin
6 stud_varray.extend(10);
7 stud_varray(1):='ab1';
8 stud_varray(2):='ab2';
9 stud_varray(3):='ab3';
10 stud_varray(4):='ab4';
11 stud_varray(5):='ab5';
12 stud_varray(6):='ab6';
13 stud_varray(7):='ab7';
14 stud_varray(8):='ab8';
15 stud_varray.delete;
16
17 dbms_output.put_line(stud_varray.limit);
18 end;
19 /
10
PL/SQL procedure successfully completed
2.巢狀表
(1)基本使用
SQL> declare
2 type stud_tab_t is table of varchar2(100);
3 stud_tab stud_tab_t:=stud_tab_t();
4 i number:=1;
5 begin
6 stud_tab.extend(10);
7 stud_tab(1):='ab1';
8 stud_tab(2):='ab2';
9 stud_tab(3):='ab3';
10 stud_tab(4):='ab4';
11 stud_tab(5):='ab5';
12 stud_tab(6):='ab6';
13 stud_tab(7):='ab7';
14 stud_tab(8):='ab8';
15 stud_tab.trim(5);
16 while stud_tab.exists(i)
17 loop
18 dbms_output.put_line(stud_tab(i));
19 dbms_output.put_line(i);
20 i:=i+1;
21 end loop;
22 end;
23 /
2 type stud_tab_t is table of varchar2(100);
3 stud_tab stud_tab_t:=stud_tab_t();
4 i number:=1;
5 begin
6 stud_tab.extend(10);
7 stud_tab(1):='ab1';
8 stud_tab(2):='ab2';
9 stud_tab(3):='ab3';
10 stud_tab(4):='ab4';
11 stud_tab(5):='ab5';
12 stud_tab(6):='ab6';
13 stud_tab(7):='ab7';
14 stud_tab(8):='ab8';
15 stud_tab.trim(5);
16 while stud_tab.exists(i)
17 loop
18 dbms_output.put_line(stud_tab(i));
19 dbms_output.put_line(i);
20 i:=i+1;
21 end loop;
22 end;
23 /
ab1
1
ab2
2
ab3
3
ab4
4
ab5
5
1
ab2
2
ab3
3
ab4
4
ab5
5
PL/SQL procedure successfully completed
(2)刪除其中幾個元素後
SQL> declare
2 type stud_tab_t is table of varchar2(100);
3 stud_tab stud_tab_t:=stud_tab_t();
4 i number:=1;
5 begin
6 stud_tab.extend(10);
7 stud_tab(1):='ab1';
8 stud_tab(2):='ab2';
9 stud_tab(3):='ab3';
10 stud_tab(4):='ab4';
11 stud_tab(5):='ab5';
12 stud_tab(6):='ab6';
13 stud_tab(7):='ab7';
14 stud_tab(8):='ab8';
15 stud_tab.delete(2);
16 stud_tab.delete(5);
17 stud_tab.delete(7);
18 while stud_tab.exists(i)
19 loop
20 dbms_output.put_line(stud_tab(i));
21 dbms_output.put_line(i);
22 i:=i+1;
23 end loop;
24 end;
25 /
SQL> declare
2 type stud_tab_t is table of varchar2(100);
3 stud_tab stud_tab_t:=stud_tab_t();
4 i number:=1;
5 begin
6 stud_tab.extend(10);
7 stud_tab(1):='ab1';
8 stud_tab(2):='ab2';
9 stud_tab(3):='ab3';
10 stud_tab(4):='ab4';
11 stud_tab(5):='ab5';
12 stud_tab(6):='ab6';
13 stud_tab(7):='ab7';
14 stud_tab(8):='ab8';
15 stud_tab.delete(2);
16 stud_tab.delete(5);
17 stud_tab.delete(7);
18 while stud_tab.exists(i)
19 loop
20 dbms_output.put_line(stud_tab(i));
21 dbms_output.put_line(i);
22 i:=i+1;
23 end loop;
24 end;
25 /
ab1
1
1
PL/SQL procedure successfully completed
之所以只顯示第一個元素,是因為第二個被我刪除了。沒呼叫到。
正確的呼叫方法應該是:
SQL> declare
2 type stud_tab_t is table of varchar2(100);
3 stud_tab stud_tab_t:=stud_tab_t();
4 i number:=1;
5 begin
6 stud_tab.extend(10);
7 stud_tab(1):='ab1';
8 stud_tab(2):='ab2';
9 stud_tab(3):='ab3';
10 stud_tab(4):='ab4';
11 stud_tab(5):='ab5';
12 stud_tab(6):='ab6';
13 stud_tab(7):='ab7';
14 stud_tab(8):='ab8';
15 stud_tab.delete(2);
16 stud_tab.delete(5);
17 stud_tab.delete(7);
18
19 while stud_tab.exists(i)
20 loop
21 dbms_output.put_line(stud_tab(i));
22 dbms_output.put_line(i);
23 i:=stud_tab.next(i);
24 end loop;
25 end;
26 /
SQL> declare
2 type stud_tab_t is table of varchar2(100);
3 stud_tab stud_tab_t:=stud_tab_t();
4 i number:=1;
5 begin
6 stud_tab.extend(10);
7 stud_tab(1):='ab1';
8 stud_tab(2):='ab2';
9 stud_tab(3):='ab3';
10 stud_tab(4):='ab4';
11 stud_tab(5):='ab5';
12 stud_tab(6):='ab6';
13 stud_tab(7):='ab7';
14 stud_tab(8):='ab8';
15 stud_tab.delete(2);
16 stud_tab.delete(5);
17 stud_tab.delete(7);
18
19 while stud_tab.exists(i)
20 loop
21 dbms_output.put_line(stud_tab(i));
22 dbms_output.put_line(i);
23 i:=stud_tab.next(i);
24 end loop;
25 end;
26 /
ab1
1
ab3
3
ab4
4
ab6
6
ab8
8
1
ab3
3
ab4
4
ab6
6
ab8
8
9
10
PL/SQL procedure successfully completed
在集合為空時,不會顯示任何內容:
SQL> declare
2 type stud_tab_t is table of varchar2(100);
3 stud_tab stud_tab_t:=stud_tab_t();
4 i number:=1;
5 begin
6 stud_tab.extend(10);
7 stud_tab(1):='ab1';
8 stud_tab(2):='ab2';
9 stud_tab(3):='ab3';
10 stud_tab(4):='ab4';
11 stud_tab(5):='ab5';
12 stud_tab(6):='ab6';
13 stud_tab(7):='ab7';
14 stud_tab(8):='ab8';
15 stud_tab.delete;
16
17 while stud_tab.exists(i)
18 loop
19 dbms_output.put_line(stud_tab(i));
20 dbms_output.put_line(i);
21 i:=stud_tab.next(i);
22 end loop;
23 end;
24 /
PL/SQL procedure successfully completed
SQL>
3.索引表(關聯陣列)
1)前面兩種集合型別:巢狀表和可變陣列(varray)必須進行初始化才可以使用,而對關聯陣列進行初始化會報錯。
SQL> declare
2 type stud_tab_t is table of varchar2(100) index by pls_integer;
3 stud_tab stud_tab_t:=stud_tab_t();
4 i number:=1;
5 begin
6 stud_tab.extend(10);
7 stud_tab(1):='ab1';
8 stud_tab(2):='ab2';
9 stud_tab(3):='ab3';
10 stud_tab(4):='ab4';
11 stud_tab(5):='ab5';
12 stud_tab(6):='ab6';
13 stud_tab(7):='ab7';
14 stud_tab(8):='ab8';
15 stud_tab.delete(2);
16 stud_tab.delete(5);
17 stud_tab.delete(7);
18
19
20 while stud_tab.exists(i)
21 loop
22 dbms_output.put_line(stud_tab(i));
23 dbms_output.put_line(i);
24 i:=stud_tab.next(i);
25 end loop;
26 end;
27 /
ORA-06550: 第 3 行, 第 24 列:
PLS-00222: 在此範圍中不存在名為 'STUD_TAB_T' 的函式
ORA-06550: 第 3 行, 第 12 列:
PL/SQL: Item ignored
ORA-06550: 第 6 行, 第 3 列:
PLS-00320: 此表示式的型別宣告不完整或格式不正確
ORA-06550: 第 6 行, 第 3 列:
…………
ORA-06550: 第 11 行, 第 3 列:
PL/SQL: Statement ignored
ORA-06550: 第 12 行, 第 3 列:
PLS-00320: 此表示式的型別宣告不完整或格式不正確
O
PLS-00222: 在此範圍中不存在名為 'STUD_TAB_T' 的函式
ORA-06550: 第 3 行, 第 12 列:
PL/SQL: Item ignored
ORA-06550: 第 6 行, 第 3 列:
PLS-00320: 此表示式的型別宣告不完整或格式不正確
ORA-06550: 第 6 行, 第 3 列:
…………
ORA-06550: 第 11 行, 第 3 列:
PL/SQL: Statement ignored
ORA-06550: 第 12 行, 第 3 列:
PLS-00320: 此表示式的型別宣告不完整或格式不正確
O
SQL> declare
2 type stud_tab_t is table of varchar2(100) index by pls_integer;
3 stud_tab stud_tab_t;
4 i number:=1;
5 begin
6 stud_tab.extend(10);
7 stud_tab(1):='ab1';
8 stud_tab(2):='ab2';
9 stud_tab(3):='ab3';
10 stud_tab(4):='ab4';
11 stud_tab(5):='ab5';
12 stud_tab(6):='ab6';
13 stud_tab(7):='ab7';
14 stud_tab(8):='ab8';
15 stud_tab.delete(2);
16 stud_tab.delete(5);
17 stud_tab.delete(7);
18
19
20 while stud_tab.exists(i)
21 loop
22 dbms_output.put_line(stud_tab(i));
23 dbms_output.put_line(i);
24 i:=stud_tab.next(i);
25 end loop;
26 end;
27 /
2 type stud_tab_t is table of varchar2(100) index by pls_integer;
3 stud_tab stud_tab_t;
4 i number:=1;
5 begin
6 stud_tab.extend(10);
7 stud_tab(1):='ab1';
8 stud_tab(2):='ab2';
9 stud_tab(3):='ab3';
10 stud_tab(4):='ab4';
11 stud_tab(5):='ab5';
12 stud_tab(6):='ab6';
13 stud_tab(7):='ab7';
14 stud_tab(8):='ab8';
15 stud_tab.delete(2);
16 stud_tab.delete(5);
17 stud_tab.delete(7);
18
19
20 while stud_tab.exists(i)
21 loop
22 dbms_output.put_line(stud_tab(i));
23 dbms_output.put_line(i);
24 i:=stud_tab.next(i);
25 end loop;
26 end;
27 /
ORA-06550: 第 6 行, 第 3 列:
PLS-00306: 呼叫 'EXTEND' 時引數個數或型別錯誤
ORA-06550: 第 6 行, 第 3 列:
PL/SQL: Statement ignored
2)正確的引用方法
SQL>
SQL> declare
2 type stud_tab_t is table of varchar2(100) index by pls_integer;
3 stud_tab stud_tab_t;
4 i number:=1;
5 begin
6 stud_tab(1):='ab1';
7 stud_tab(2):='ab2';
8 stud_tab(3):='ab3';
9 stud_tab(4):='ab4';
10 stud_tab(5):='ab5';
11 stud_tab(6):='ab6';
12 stud_tab(7):='ab7';
13 stud_tab(8):='ab8';
14 stud_tab.delete(2);
15 stud_tab.delete(5);
16 stud_tab.delete(7);
17
18
19 while stud_tab.exists(i)
20 loop
21 dbms_output.put_line(stud_tab(i));
22 dbms_output.put_line(i);
23 i:=stud_tab.next(i);
24 end loop;
25 end;
26 /
SQL>
SQL> declare
2 type stud_tab_t is table of varchar2(100) index by pls_integer;
3 stud_tab stud_tab_t;
4 i number:=1;
5 begin
6 stud_tab(1):='ab1';
7 stud_tab(2):='ab2';
8 stud_tab(3):='ab3';
9 stud_tab(4):='ab4';
10 stud_tab(5):='ab5';
11 stud_tab(6):='ab6';
12 stud_tab(7):='ab7';
13 stud_tab(8):='ab8';
14 stud_tab.delete(2);
15 stud_tab.delete(5);
16 stud_tab.delete(7);
17
18
19 while stud_tab.exists(i)
20 loop
21 dbms_output.put_line(stud_tab(i));
22 dbms_output.put_line(i);
23 i:=stud_tab.next(i);
24 end loop;
25 end;
26 /
ab1
1
ab3
3
ab4
4
ab6
6
ab8
8
1
ab3
3
ab4
4
ab6
6
ab8
8
PL/SQL procedure successfully completed
3)使用字串索引的集合
SQL> declare
2 type stud_tab_t is table of varchar2(100) index by varchar2(100);
3 stud_tab stud_tab_t;
4 i number:=1;
5 begin
6 stud_tab('a1'):='ab1';
7 stud_tab('a2'):='ab2';
8 stud_tab('a3'):='ab3';
9 dbms_output.put_line(stud_tab('a1'));
10 dbms_output.put_line(stud_tab('a2'));
11 dbms_output.put_line(stud_tab('a3'));
12 end;
13 /
ab1
ab2
ab3
ab2
ab3
PL/SQL procedure successfully completed
還可以採用拼接的方式得到集合索引:
SQL> declare
2 type stud_tab_t is table of varchar2(100) index by varchar2(100);
3 stud_tab stud_tab_t;
4 i number:=1;
5 begin
6 stud_tab('a1'):='ab1';
7 stud_tab('a2'):='ab2';
8 stud_tab('a3'):='ab3';
9 while stud_tab.exists('a'||i)
10 loop
11 dbms_output.put_line(stud_tab('a'||i));
12 dbms_output.put_line(i);
13 i:=i+1;
14 end loop;
15 end;
16 /
SQL> declare
2 type stud_tab_t is table of varchar2(100) index by varchar2(100);
3 stud_tab stud_tab_t;
4 i number:=1;
5 begin
6 stud_tab('a1'):='ab1';
7 stud_tab('a2'):='ab2';
8 stud_tab('a3'):='ab3';
9 while stud_tab.exists('a'||i)
10 loop
11 dbms_output.put_line(stud_tab('a'||i));
12 dbms_output.put_line(i);
13 i:=i+1;
14 end loop;
15 end;
16 /
ab1
1
ab2
2
ab3
3
1
ab2
2
ab3
3
PL/SQL procedure successfully completed
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26451536/viewspace-768613/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle集合型別的first、next、prior、last方法.TXTOracle型別AST
- Oracle實驗(05):時間型別Oracle型別
- 【Redis實戰】有序集合型別Redis型別
- Guava集合--新集合型別Guava型別
- Oracle三種集合資料型別的比較Oracle資料型別
- oracle集合型別的一些基本函式Oracle型別函式
- Redis的集合型別(Set)Redis型別
- List型別集合型別
- Scala 中的集合(一):集合型別與操作型別
- Redis 中的集合型別是怎麼實現的?Redis型別
- 避免使用Oracle的char型別Oracle型別
- oracle的timestamp型別使用Oracle型別
- Oracle型別的建立及使用Oracle型別
- [20150503]關於oracle的number型別.txtOracle型別
- Swift之集合型別 (Collection Types)(集合篇)Swift型別
- Hive中的集合資料型別Hive資料型別
- python的資料型別(集合)Python資料型別
- 如何驗證Oracle資料庫中表的型別Oracle資料庫型別
- Java集合型別詳解Java型別
- pl/sql集合型別(一)SQL型別
- python 集合型別 setPython型別
- redis之有序集合型別(Zset)——排行榜的實現Redis型別
- C# 泛型集合的自定義型別排序C#泛型型別排序
- PHP+Redis實戰教程(4):set集合型別PHPRedis型別
- Oracle實驗(03):number的使用Oracle
- Go快速入門 07 | 集合型別: array、slice 和 map的使用Go型別
- Oracle中date型別使用注意Oracle型別
- 基礎-JAVA集合型別主要區別Java型別
- # Swift 集合型別之迭代器Swift型別
- redis有序集合型別sort setRedis型別
- Swift 整理(三)——字串、集合型別Swift字串型別
- C#集合型別大盤點C#型別
- Swift入坑系列—集合型別Swift型別
- MVC 繫結 集合型別 modelMVC型別
- pl/sql集合型別_varray(二)SQL型別
- C#中常用集合型別C#型別
- HashMap與LinkedHashMap型別集合HashMap型別
- 自定義函式實現字串分割,返回集合型別函式字串型別