在使用集合进行数据处理时,需要了解这几种类型可能会产生的异常及如何对这些异常进行处理。例如,去访问一个未被初始化的嵌套表,或访问索引表中一个不存在的元素,下标超出变长数组的最大范围都会引发异常。下面是集合中的一些常见的异常情况。
- COLLECTION_IS_NULL
:调用一个空集合的方法。
- NO_DATA_FOUND
:下标索引指向一个被删除的元素或索引表中不存在的元素。
- SUBSCRIPT_BEYOND_COUNT
:下标索引值超过集合中的元素个数。
- SUBSCRIPT_OUTSIDE_LIMIT
:下标索引超过允许范围。
- VALUE_ERROR
:下标索引值为空,或不能转换成正确的键类型。当键被定义在PLS_INTEGER
的范围内,而下标索引值超过这个范围时,就可能抛出这个异常。
如:
DECLARE
TYPE numlist IS TABLE OF NUMBER;
nums numlist; --一个空的嵌套表
BEGIN
nums(1):=1; --未构造就使用表元素,将触发:ORA-06531:引用未初始化的收集
nums:=numlist(1,2);--初始化嵌套表
nums(NULL):=3; --使用NULL索引键,将触发:ORA-06502:PL/SQL:数字或值错误:NULL索引表键值
nums(0):=3; --访问不存在的下标,将触发:ORA-06532:下标超出限制
nums(3):=3; --下标超过最大元素个数,将触发:ORA-06532:下标超出限制
nums.DELETE(1); --删除第1个元素
IF nums(1)=1 THEN
NULL;
--因为第1个元素已被删除,再访问将触发:ORA-01403: 未找到任何数据
END IF;
END;