Oracle12C--索引表(三十二)

知识点的梳理:
  • 索引表不存在遍历操作!
  • 由于索引表的索引号是非固定的,用户可以通过"索引表对象.EXISTS()"函数进行验证
    • EXISTS()函数属于集合函数;

      

  • 它是啥?
    • 索引表类似数组,可以保存多个数据,通过下标访问每一个数据;
    • 索引表与数组的区别:
      • 索引表的下标,可以用整数或字符串来定义;
      • 使用数字作为索引下标,可以设置为负数;
      • 索引表不需要初始化,可以直接为指定索引赋值,开辟的索引表的索引不一定必须连续;
  • 使用方式
    • 语法:

TYPE 类型名称 IS TABLE OF 数据类型 [NOT NULL]
INDEX BY [PLS_INTEGER | BINARY_INTEGER | VARCHAR2(长度)];

  • 示例1定义索引表

 

DECLARE

TYPE info_index IS TABLE OF VARCHAR(20)

INDEX BY PLS_INTEGER ;

v_info info_index ;

BEGIN

v_info (1) := 'bing' ;

v_info (10) := 'JAVA' ;

DBMS_OUTPUT.put_line(v_info(1)) ;

DBMS_OUTPUT.put_line(v_info(10)) ;

END ;

/

运行结果:

bing

JAVA

注意:使用索引表中不存在的索引号时,会出现:"ORA-01403:未找到任何数据"的异常

  • 示例2使用EXISTS()函数,来验证索引

DECLARE

TYPE info_index IS TABLE OF VARCHAR(20)

INDEX BY PLS_INTEGER ;

v_info info_index ;

BEGIN

v_info (1) := 'bing' ;

v_info (10) := 'JAVA' ;

IF v_info.EXISTS(10) THEN

DBMS_OUTPUT.put_line(v_info(1)) ;

END IF ;

IF v_info.EXISTS(30) THEN

DBMS_OUTPUT.put_line(v_info(30)) ;

ELSE

DBMS_OUTPUT.put_line('索引号为30的数据不存在!') ;

END IF ;

END ;

/

运行结果:

bing

索引号为30的数据不存在!
分析:
通过这种方式,可以避免"
ORA-01403:未找到任何数据"异常的出现

  • 示例3:定义索引表,使用VARCHAR2作为下标索引

DECLARE

TYPE info_index IS TABLE OF VARCHAR(50)

INDEX BY VARCHAR2(30) ;

v_info info_index ;

BEGIN

v_info ('公司名称') := 'Oraclebing' ;

v_info ('培训项目') := 'JAVA-Android高端培训' ;

DBMS_OUTPUT.put_line(v_info('公司名称')) ;

DBMS_OUTPUT.put_line(v_info('培训项目')) ;

END ;

/

运行结果:

Oracle(bing)

JAVA-Android高端培训

分析:
使用
VARCHAR2作为索引下标类型时,需要为其设置一个大小(INDEX BY VARCHAR2(30)

,而后所设置的索引下标长度应该在此范围之内

  • 示例4:定义ROWTYPE型的索引表

DECLARE

TYPE dept_index IS TABLE OF dept%ROWTYPE

INDEX BY PLS_INTEGER ;

v_dept dept_index ;

BEGIN

v_dept(0).deptno := 80 ;

v_dept(0).dname := 'Oracle' ;

v_dept(0).loc := '北京' ;

IF v_dept.EXISTS(0) THEN

DBMS_OUTPUT.put_line('部门编号:' || v_dept(0).deptno || ',名称:' || v_dept(0).dname || ',位置:' || v_dept(0).loc) ;

END IF ;

END ;

/

运行结果:
部门编号:80,名称:Oracle,位置:北京

你可能感兴趣的:(Oracle,Oracle12c学习笔记)