本文介绍了first
/last
函数的相关说明和使用示例等内容。
first
和last
都是函数。如果集合至少有一个元素,则first
和last
分别返回第一个和最后一个元素的索引(忽略已删除的元素,即使delete
保留了占位符)。如果集合只有一个元素,则first
和last
返回相同的索引。如果集合为空,则first
和last
返回NULL。由于变长数组在PolarDB的内部实现中并不是一直保持稠密,因此first
并不一定一直返回1,last
也不一定和count
一直相等。当非首尾元素被delete
时,first
和last
不会出现变化。
示例
以下是一个变长数组的first
/last
基础使用的示例。
DECLARE
TYPE v_type IS VARRAY(3) OF NUMBER;
varray v_type := v_type(11, 22, 33);
PROCEDURE print(varray v_type) IS
i NUMBER;
BEGIN
FOR i IN varray.FIRST..varray.LAST LOOP
DBMS_OUTPUT.PUT(i || '. ');
IF varray.EXISTS(i) THEN
RAISE NOTICE '%. %', i, varray(i);
ELSE
RAISE NOTICE '%. does not exist', i;
END IF;
END LOOP;
RAISE NOTICE '---';
END;
BEGIN
print(varray);
varray.DELETE(2);
print(varray);
END;
结果显示如下:
NOTICE: 1. 11
NOTICE: 2. 22
NOTICE: 3. 33
NOTICE: ---
NOTICE: 1. 11
NOTICE: 2. does not exist
NOTICE: 3. 33
NOTICE: ---
DO
对于关联数组来说,第一个和最后一个的定义取决于索引的排序规则。以下是一个关联数组的first
/last
基础使用示例。
DECLARE
TYPE int_type IS TABLE OF INT INDEX BY PLS_INTEGER;
TYPE char_type IS TABLE OF INT INDEX BY VARCHAR(10);
arr1 int_type;
arr2 char_type;
BEGIN
arr1(1) := 1;
arr1(10) := 10;
arr2('a') := 1;
arr2('z') := 10;
RAISE NOTICE 'arr1 first: %, last: %', arr1.first, arr1.last;
RAISE NOTICE 'arr2 first: %, last: %', arr2.first, arr2.last;
RAISE NOTICE '------------';
-- 删除 arr1 的一个元素
arr1.delete(10);
RAISE NOTICE 'arr1 first: %, last: %', arr1.first, arr1.last;
RAISE NOTICE '------------';
-- 删除 arr2 的全部元素
arr2.delete;
RAISE NOTICE 'arr2 first: %, last: %', arr2.first, arr2.last;
END;
结果显示如下:
NOTICE: arr1 first: 1, last: 10
NOTICE: arr2 first: a, last: z
NOTICE: ------------
NOTICE: arr1 first: 1, last: 1
NOTICE: ------------
NOTICE: arr2 first: <NULL>, last: <NULL>
DO
文档内容是否对您有帮助?