1.INDEX-BY 表
类似于C语言中的数组,声明:
TYPE tabletypeIS TABLE OF type INDEX BY BINARU_INTEGER;
其中:
tabletype是指所定义的新类型的类型名
type是要定义的index-by表的类型
元素赋值:
BEGIN
v_Name(1):='China';
v_Name(2):='USA';
v_Name(-2):='Italy'; --这里的和C语言的数组不同,既没有顺序,下标也可以为负值。
END;
实例:
DECLARE
TYPE StudyTab IS TABLE OF VARCHAR2(20)INDEX BY BINARY_INTEGER;
v_StudyTab StudyTab;
BEGIN
FOR v_Count IN 1..5 LOOP
v_StudyTab(v_Count):=v_Count*100;
END LOOP;
FOR v_Count IN 1..6 LOOP
DBMS_OUTPUT.PUT_LINE(v_StudyTab(v_Count));
END LOOP;
END;
调用不存在的元素,会报错。
2. 嵌套表
a.初始化:
在声明了嵌套表之后,如果嵌套表里没有任何元素,那么它会自动初始化为NULL,并且是只读的。因此需要进行初始化,在初始化时存于需要的数据。
DECLARE
TYPEStudyTab IS TABLE OF VARCHAR2(20);
v_StudyTabStudyTab:=StudyTab('Tom','Jack','Rose');
BEGIN
FORv_Count IN 1..3 LOOP
DBMS_OUTPUT.PUT_LINE(v_StudyTab(v_Count));
ENDLOOP;
END;
b. 元素序列
嵌套表在结构上是有序的,如果对一个嵌套表赋值,那么嵌套表元素的index将会从1开始依次递增。
DECLARE
TYPE NumTab IS TABLE OF NUMBER(4);
v_NumNumTab:=NumTab(1,2,3,4,5,6,7);
BEGIN
FOR v_Count IN1..7 LOOP
DBMS_OUTPUT.PUT_LINE('v_Num('||v_Count||')='||v_Num(v_Count));
END LOOP;
END;
3. 可变数组
可变数组声明如下:
TYPE type_name IS {VARRAY|VARYING ARRAY}(maximum_size) OF element_type [NOT Null];
其中:
type_name是可变数组的类型名
maximum_size是指可变数组元组的个数的最大值
element_type是指数组元素的类型
例子:
DECLARE
TYPE Dates IS VARRAY(7) OF VARCHAR2(10);
v_Dates Dates:=Dates('Monday','Tuesday','Wesdnesday');
BEGIN
FOR v_Count in 1..3 LOOP
DBMS_OUTPUT.PUT_LINE(v_Dates(v_Count));
END LOOP;
END;