FIRST和LAST方法
n 如果集合有至少一个元素,则FIRST和LAST分别返回第1个和最后一个元素的索引(会忽略掉被DELETE的元素);
n 如果集合中只有一个元素,则FIRST和LAST返回相同的索引;
n 如果集合为empty,则2者都返回NULL。
(1)关联数组的FIRST和LAST方法
对于以PLS_INTEGER索引的关联数组,第1个和最后一个索引分别是最小和最大的索引;
对于以字符串索引的关联数组,第1个和最后一个索引分别是排序的最小值和最大值,索引值是排序的。
DECLARE --关联数组 TYPE aa_type_int IS TABLE OF INTEGER INDEX BY PLS_INTEGER; aa_int aa_type_int;
PROCEDURE print_first_and_last IS BEGIN DBMS_OUTPUT.PUT_LINE('FIRST = ' || aa_int.FIRST); DBMS_OUTPUT.PUT_LINE('LAST = ' || aa_int.LAST); END print_first_and_last;
BEGIN aa_int(1) := 3; aa_int(2) := 6; aa_int(3) := 9; aa_int(4) := 12;
DBMS_OUTPUT.PUT_LINE('删除之前:'); print_first_and_last;
aa_int.DELETE(1); aa_int.DELETE(4);
DBMS_OUTPUT.PUT_LINE('删除之后:'); print_first_and_last; END;
|
DECLARE --以字符串索引的关联数组 TYPE aa_type_str IS TABLE OF INTEGER INDEX BY VARCHAR2(10); aa_str aa_type_str;
PROCEDURE print_first_and_last IS BEGIN DBMS_OUTPUT.PUT_LINE('FIRST = ' || aa_str.FIRST); DBMS_OUTPUT.PUT_LINE('LAST = ' || aa_str.LAST); END print_first_and_last;
BEGIN aa_str('Z') := 99; aa_str('A') := 11; aa_str('M') := 88; aa_str('B') := 22;
DBMS_OUTPUT.PUT_LINE('删除之前:'); print_first_and_last;
aa_str.DELETE('A'); aa_str.DELETE('Z');
DBMS_OUTPUT.PUT_LINE('删除之后:'); print_first_and_last; END;
|
(2)可变数组的FIRST和LAST方法
对于非EMPTY的可变数组,FIRST始终返回1;LAST始终等于COUNT。
DECLARE TYPE team_type IS VARRAY(4) OF VARCHAR2(15); team team_type; PROCEDURE print_team (heading VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT_LINE(heading); IF team IS NULL THEN DBMS_OUTPUT.PUT_LINE('不存在'); ELSIF team.FIRST IS NULL THEN DBMS_OUTPUT.PUT_LINE('无元素'); ELSE FOR i IN team.FIRST..team.LAST LOOP DBMS_OUTPUT.PUT_LINE(i || '. ' || team(i)); END LOOP; END IF; DBMS_OUTPUT.PUT_LINE('---'); END; BEGIN print_team('Team的状态:'); team := team_type(); -- 队已经建立,但无队员 print_team('Team的状态:'); team := team_type('AAA', 'BBB'); print_team('初始Team:'); team := team_type('CCC', 'DDD', 'EEE', 'FFF'); print_team('新Team:'); END;
|
(3)嵌套表的FIRST和LAST方法
嵌套表的LAST的值为COUNT,除非你在嵌套表的中间删除元素,此时LAST > COUNT。
DECLARE TYPE team_type IS TABLE OF VARCHAR2(15); team team_type; PROCEDURE print_team (heading VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT_LINE(heading); IF team IS NULL THEN DBMS_OUTPUT.PUT_LINE('不存在'); ELSIF team.FIRST IS NULL THEN DBMS_OUTPUT.PUT_LINE('无队员'); ELSE FOR i IN |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1116048/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1116048/