- 索引表不存在遍历操作!
-
由于索引表的索引号是非固定的,用户可以通过"索引表对象.EXISTS()"函数进行验证
- EXISTS()函数属于集合函数;
-
它是啥?
- 索引表类似数组,可以保存多个数据,通过下标访问每一个数据;
-
索引表与数组的区别:
- 索引表的下标,可以用整数或字符串来定义;
- 使用数字作为索引下标,可以设置为负数;
- 索引表不需要初始化,可以直接为指定索引赋值,开辟的索引表的索引不一定必须连续;
-
使用方式
- 语法:
TYPE 类型名称 IS TABLE OF 数据类型 [NOT NULL] |
- 示例1:定义索引表
| ||
注意:使用索引表中不存在的索引号时,会出现:"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的数据不存在! |
- 示例3:定义索引表,使用VARCHAR2作为下标索引
DECLARE TYPE info_index IS TABLE OF VARCHAR(50) INDEX BY VARCHAR2(30) ; v_info info_index ; BEGIN v_info ('公司名称') := 'Oracle(bing)' ; v_info ('培训项目') := 'JAVA-Android高端培训' ; DBMS_OUTPUT.put_line(v_info('公司名称')) ; DBMS_OUTPUT.put_line(v_info('培训项目')) ; END ; / | 运行结果: Oracle(bing) JAVA-Android高端培训 分析: ,而后所设置的索引下标长度应该在此范围之内 |
- 示例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 ; / | 运行结果: |