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

FIRSTLAST方法

如果集合有至少一个元素,则FIRSTLAST分别返回第1个和最后一个元素的索引(会忽略掉被DELETE的元素);

如果集合中只有一个元素,则FIRSTLAST返回相同的索引;

如果集合为empty,则2者都返回NULL

1)关联数组的FIRSTLAST方法

对于以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)可变数组的FIRSTLAST方法

对于非EMPTY的可变数组,FIRST始终返回1LAST始终等于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)嵌套表的FIRSTLAST方法

嵌套表的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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值