ITPub博客

首页 > 数据库 > Oracle > PLSQL Language Referenc-PL/SQL集合和记录-集合方法-FIRST和LAST方法

PLSQL Language Referenc-PL/SQL集合和记录-集合方法-FIRST和LAST方法

原创 Oracle 作者:LuiseDalian 时间:2014-03-13 14:32:51 0 删除 编辑

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博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1116048/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    6043854