本文介紹了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