集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合:可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值。嵌套表:视为表中之表,可以有任意数量的元素,不需要预先定义限制值。
在PL/SQL中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE 和Table of Record来代替多维数组,一样挺好用的。
emp_type 就好象一个table 中的一条record 一样,里面有id, name,gender等。emp_type_array 象个table, 里面含有一条条这样的record (emp_type),就象多维数组一样。--单维数组
DECLARE
TYPE emp_ssn_array IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;best_employees emp_ssn_array;
worst_employees emp_ssn_array;BEGIN
best_employees(1) := '123456';
best_employees(2) := '888888';worst_employees(1) := '222222';
worst_employees(2) := '666666';FOR i IN 1..best_employees.count LOOP
DBMS_OUTPUT.PUT_LINE('i='|| i || ', best_employees= ' ||best_employees(i)
|| ', worst_employees= ' ||worst_employees(i));
END LOOP;END;--多维数组
DECLARETYPE emp_type IS RECORD
( emp_id employee_table.emp_id%TYPE,
emp_name employee_table.emp_name%TYPE,
emp_gender employee_table.emp_gender%TYPE );TYPE emp_type_array IS TABLE OF emp_type INDEX BY BINARY_INTEGER;emp_rec_array emp_type_array;
emp_rec emp_type;BEGIN
emp_rec.emp_id := 300000000;
emp_rec.emp_name := 'Barbara';
emp_rec.emp_gender := 'Female';emp_rec_array(1) := emp_rec;emp_rec.emp_id := 300000008;
emp_rec.emp_name := 'Rick';
emp_rec.emp_gender := 'Male';emp_rec_array(2) := emp_rec;FOR i IN 1..emp_rec_array.count LOOP
DBMS_OUTPUT.PUT_LINE('i='||i
||', emp_id ='||emp_rec_array(i).emp_id
||', emp_name ='||emp_rec_array(i).emp_name
||', emp_gender = '||emp_rec_array(i).emp_gender);
END LOOP; END;
-------------- Result --------------
i=1, emp_id =300000000, emp_name =Barbara, emp_gender = Female
i=2, emp_id =300000008, emp_name =Rick, emp_gender = Male

解决方案 »

  1.   

    或者使用索引表也可以:
    定义:
        TYPE ArtSort is table of tarticle.fsort%type index by binary_integer;
        vSort ArtSort;
        nSortIndex binary_integer;
        cursor c is
          select * from table1;
    使用:
          nSortIndex := 0;
          for r in c loop
            nSortIndex := nSortIndex + 1;
            vSort(nSortIndex) := r.FCODE;
          end loop;
      

  2.   

    当然了,这里的tarticle.fsort%type这里的类型也可以是像上面定义的record一样,
    如:
    定义:
        TYPE ArtSort is table of emp_type index by binary_integer;
        vSort ArtSort;
        nSortIndex binary_integer;
        cursor c is
          select * from table1;
    使用:
          nSortIndex := 0;
          for r in c loop
            nSortIndex := nSortIndex + 1;
            vSort(nSortIndex).emp_id  := r.gid;
            vSort(nSortIndex).emp_name  := r.name; 
          end loop;
      

  3.   

    赋完值了想使用的话,可以这样使用:
    vValue := vSort(1);  

    vValue := vSort(1).emp_id;
      

  4.   

    用下面语句声明数组类型
    type intarray is varry(30) of integer;用下面语句声明一个数组变量
    declare 
      A intarray;
      

  5.   

    vSort应该 vSort.extend;
    这是什么意思啊?呵呵