oracle(集合门类)

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;