记录类型是面向单行记录的。而要操作多行记录就必须使用集合了。ORACLE10g有提供三种集合供我们使用。
1.1 varray 有点类似于java当中的数组.
语法:TYPE ... VARRAY OF type(size_limit)_emelement[not null]
例:
DECLARE
TYPE integer_varray IS VARRAY(5) OF INTEGER;
t_varray INTEGER_VARRAY := integer_varray();
j INTEGER:=1;
BEGIN
WHILE j <=5 LOOP
DBMS_OUTPUT.PUT_LINE('J=' || j);
--初始化
t_varray.EXTEND;
t_varray(j):=10+j;
j := j+1;
END LOOP;
--varray是从1开始计数下标的,这一点不同于java中的0计数
FOR i in 1..5 LOOP
DBMS_OUTPUT.PUT_LINE(t_varray(i));
END LOOP;
END;
1.2 嵌套表 类似于JAVA中的ArrayList吧,动态数组.
语法:TYPE ... IS TABLE OF tepe[not null]
例:
DECLARE
TYPE t_table IS TABLE OF VARCHAR(10 char);
t T_TABLE := t_table();
BEGIN
FOR i in 1..5 LOOP
t.extend;
t(i) := 'testtestt' || +i;
END LOOP;
FOR i in 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('t=' || t(i));
END LOOP;
END;
1.2联合数组,在10g之前也称pl sql表.
语法:TYPE ... IS TABLE OF tepe[not null] INDEX BY key_type;
例:
DECLARE
TYPE t_table IS TABLE OF STRING(5 CHAR)
INDEX BY BINARY_INTEGER;
t T_TABLE;
BEGIN
FOR i in 1..10 LOOP
t(i) := 't' || i;
END LOOP;
FOR i in 1..10 LOOP
DBMS_OUTPUT.PUT_LINE('t=' || t(i) );
END LOOP;
END;
|