日期:2014-05-16  浏览次数:20523 次

oracle(集合类型)

http://blog.sina.com.cn/s/blog_4b65223901009t26.html

?

记录类型是面向单行记录的。而要操作多行记录就必须使用集合了。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;