集合是相同类型元素的组合。在集合中,使用唯一的下标来标识每个元素。
PL/SQL表类似于单列数据库表。PL/SQL表的数据行并不是按照预定义的顺序存储的,但是当使用变量来检索数据时,每行数据都会被分配一个连续的下标,从1开始。
如下图是一个由整数组成的PL/SQL表。每个数字被分配一个唯一的下标,对应该数字在表中的位置。

PL/SQL表存在两种类型:联合数组(正式说法是索引表)和嵌套表。它们具有相同的结构,并且都使用下标方式来访问数据行。两种类型之间的主要差别是,嵌套表可以存储在数据库列中,而联合数组不行。
直接看实例还好懂一些:
DECLARE
CURSOR c_ooag_cur01 IS
SELECT ooag011
FROM ooag_t
WHERE ooagent = 70;
-- 定义一个联合数组(索引表)
TYPE ooag011_type IS TABLE OF ooag_t.ooag011%TYPE
INDEX BY BINARY_INTEGER;
-- 定义一个索引表类型的变量
ooag011_tab ooag011_type;
v_cnt INTEGER := 0;
BEGIN
FOR ooag011_rec IN c_ooag_cur01 LOOP
v_cnt := v_cnt + 1;
-- 往索引表中插入数据
ooag011_tab(v_cnt) := ooag011_rec.ooag011;
DBMS_OUTPUT.PUT_LINE('ooag001('||v_cnt||') = '||ooag011_tab(v_cnt));
END LOOP;
-- COUNT()统计索引表的行数。
FOR i IN 1 .. ooag011_tab.count() LOOP
DBMS_OUTPUT.PUT_LINE(ooag011_tab(i));
END LOOP;
-- 显示集合中的第一个元素
DBMS_OUTPUT.PUT_LINE(ooag011_tab(ooag011_tab