[Orace] 第17章 集合-索引表


索引表类似于程序语言中的数组,可以保存多个数据,并且通过下标来访问每一个数据,但是在 Oracle 中可用来定义索引表下标的数据类型可以是整数也可以是字符串。

但是在Oracle中定义的索引表与程序中的数组还有以下的区别:

  • 索引表不需要进行初始化,而已直接为指定索引赋值,开辟的索引表的索引不一定必须连续。
  • 索引表不仅可以使用数字作为索引下标,也可以利用字符串表示索引下标,使用数字作为索引下标时也可以设置为负数。

定义索引表

  • TYPE TYPE_NAME IS TABLE OF DATA_TYPE [NOT NULL]
    INDEX BY [PLS_INTEGER | BINARY_INTEGER | VARCHAR2(LENGTH)];
DECLARE
    TYPE INFO_INDEX IS TABLE OF VARCHAR2(20) 
    INDEX BY PLS_INTEGER;

    V_INFO INFO_INDEX;
BEGIN
    V_INFO(1)  := 'JAVA';
    V_INFO(10) := 'PL/SQL';

    IF V_INFO.EXISTS(1) THEN 
        DBMS_OUTPUT.PUT_LINE(V_INFO(1));
    ELSE
        DBMS_OUTPUT.PUT_LINE('NOT EXISTS');
    END IF;

    IF V_INFO.EXISTS(30) THEN 
        DBMS_OUTPUT.PUT_LINE(V_INFO(30));
    ELSE
        DBMS_OUTPUT.PUT_LINE('NOT EXISTS');
    END IF;

EXCEPTION
    WHEN OTHERS THEN 
        DBMS_OUTPUT('WRONG:'|| SQLCODE || SQLERM);
END;
DECLARE
    TYPE DEPT_INDEX IS TABLE OF DEPT%ROWTYPE 
    INDEX BY PLS_INTEGER;

    V_DEPT DEPT_INDEX; 
BEGIN
    V_DEPT(0).DEPT   := 80;
    V_DEPT(0).DNAME  := 'MLDN';
    V_DEPT(0).LOC    := 'PEKING';

    IF V_DEPT.EXISTS(0) THEN 
        DBMS_OUTPUT.PUT_LINE();
    END IF;
EXCEPTION
    WHEN OTHERS THEN 
        DBMS_OUTPUT('WRONG:'|| SQLCODE || SQLERM);
END;
DECLARE
    TYPE DEPT_TYPE IS RECORD(
        DEPTNO    DEPT.DEPTNO%TYPE,
        DNAME     DEPT.DNAME%TYPE,
        LOC       DEPT.LOC%TYPE
    );

    TYPE DEPT_INDEX IS TABLE OF DEPT_TYPE 
    INDEX BY PLS_INTEGER;

    V_DEPT DEPT_INDEX; 
BEGIN
    V_DEPT(0).DEPT   := 80;
    V_DEPT(0).DNAME  := 'MLDN';
    V_DEPT(0).LOC    := 'PEKING';

    IF V_DEPT.EXISTS(0) THEN 
        DBMS_OUTPUT.PUT_LINE();
    END IF;
EXCEPTION
    WHEN OTHERS THEN 
        DBMS_OUTPUT('WRONG:'|| SQLCODE || SQLERM);
END;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值