ORACLE 10G的集合API
集合API方法最早是在ORACLE 8I中引入的。集合API提供了简化访问集合的方法。在ORACLE 10G以前,这些方法确实简化了对集合的访问。但是,并不是非要求掌握这些方法不可。从ORACLE 9I的INDEX-BY表到ORACLE 10G的联合数组的转换,使它们成为必须掌握的方法。
下面是我从书上摘录下的一些集合API,累死我了……想上网找个图还没有。
方法名称 | 说明 | 返回值的类型 | 所支持集合的类型 |
COUNT | COUNT方法返回的是VARRAY和嵌套表中已经分配了存储空间的元素的数目。在联合数组上使用这个方法时,它返回联合数组中元素的数目。COUNT方法可能会比VARRAY的LIMIT方法要小。 | PLS_INTEGER | 所有集合类型 |
DELETE(n) | DELETE方法带有一个重载的形式参数,形式参数的类型为PLS_INTEGER、VARCHAR2或LONG类型。这个形式参数对应的是集合中元素的下标。它是一个过程,没有返回值。 | 无返回值 | 所有集合类型 |
DELETE(n,m) | DELETE方法带有一个重载的形式参数,形式参数的类型为PLS_INTEGER、VARCHAR2或LONG类型。这两个形式参数分别对应的是最小和最大下标。这两个参数设定了集合中元素的包含范围。它是一个过程,没有返回值。 | 无返回值 | 所有集合类型 |
EXISTS(n) | EXISTS方法判断某个元素是否存在于集合中。它带有一个重载的形式参数,形式参数的数据类型为PLS_INTEGER、VARCHAR2或LONG类型。这个形式参数对应的是集合中元素的下标。即使这个集合是一个空元素集合,调用EXISTS方法也不会引发COLLECTION_IS_NULL异常 | TRUE或FALSE | 所有集合类型 |
EXTEND | EXTEND方法为集合中的新元素分配存储空间。它用在向集合添加值以前,为该值分配存储空间。如果试图分配空间的元素超过了VARRAY的LIMIT返回值,该方法就会失败。 | 没有返回值 | VARRAY或嵌套表 |
EXTEND(n) | EXTEND方法为集合中的多个新元素分配存储空间。它带有一个形式参数,形式参数的数据类型为PLS_INTEGER类型。它用在向集合添加值以前,为该值分配存储空间。如果试图分配空间的元素超过了VARRAY的LIMIT返回值,该方法就会失败。 | 没有返回值 | VARRAY或嵌套表 |
EXTEND(n,i) | EXTEND方法为集合中的多个新元素分配存储空间。它带有两个形式参数,这两个形式参数类型均为PLS_INTEGER类型。第一个参数表示要添加多少个新元素,第二个参数是引用集合中已有的元素,该元素会被复制到新元素上。如果试图分配空间的元素超过了VARRAY的LIMIT返回值,该方法就会失败。 | 没有返回值 | VARRAY或嵌套表 |
FIRST | FIRST方法返回集合中元素的最低下标值。 | PLS_INTEGER、VARCHAR2或LONG类型 | 所有集合类型 |
LAST | LAST方法返回集合中元素的最高下标值。 | PLS_INTEGER、VARCHAR2或LONG类型 | 所有集合类型 |
LIMIT | LIMIT方法返回VARRAY中允许出现的最高下标值 | PLS_INTEGER类型 | VARRAY |
NEXT(n) | NEXT方法带有一个重载的形式参数,它可以接收参数的数据类型包括PLS_INTEGER、VARCHAR2或LONG数据类型。形式参数对应的是实参必须是集合的有效下标。NEXT方法使用下标,查找集合中下一个更高的下标。如果没有更高的下标值,NEXT方法就返回NULL值。 | PLS_INTEGER、VARCHAR2或LONG类型 | 所有集合类型 |
PRIOR(n) | PRIOR方法带有一个重载的形式参数,它可以接收参数的数据类型包括PLS_INTEGER、VARCHAR2或LONG数据类型。形式参数对应的是实参必须是集合的有效下标。PRIOR方法使用下标,查找集合中下一个更低的下标。如果没有更低的下标值,PRIOR方法就返回NULL值。 | PLS_INTEGER、VARCHAR2或LONG类型 | 所有集合类型 |
TRIM | TRIM方法删除集合中的最高下标值 | 无返回值 | 所有集合类型 |
TRIM(n) | TRIM方法带有一个形式参数。他接收PLS_INTEGER数据类型。对应的实参必须是比COUNT方法返回的值小的一个整数值,否则就会引发异常。它删除以实参形式传递给该方法的数字或元素。 | 无返回值 | 所有集合类型 |
注:集合API 的COUNT方法只在两种条件下才返回0值
-
当VARRAY和嵌套表集合类型被初始化,且没有将空间分配给新元素的时候。
-
没有对联合数组赋值的时候。
总共有5个标准的集合异常
集合异常 | 引发条件 |
COLLECTION_IS_NULL | 试图使用一个空集合的时候 |
NO_DATA_FOUND | 试图使用一个已经被删除的下标,或一个不存在的唯一性字符串索引值(在联合数组中)的时候 |
SUBSCRIPT_BEYOND_COUNT | 试图使用一个比当前最大元素数目更高的数字索引值的时候引发该异常。该错误只会发生在VARRAY和嵌套表中。新添加元素的时候,联合数组不受COUNT方法返回值的限制 |
SUBSCRIPT_OUTSIDE_LIMIT | 试图使用在方法LIMIT返回值范围之外的一个数字索引值的时候引发该异常。该错误只会发生在VARRAY和嵌套表中。LIMIT值的确定有两种方法。设置VARRAY最大值的时候,也就设置了它们的LIMIT值。嵌套表没有固定的最大值,因此它的最大值是使用EXTEND方法分配空间的时候确定的 |
VALUE_ERROR | 试图使用一个不能转换为PLS_INTEGER类型的数据类型作为数字下标的时候引发该异常 |