index表定义:
TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY BINARY_INTERGET;
例如:
1、TYPE emp_type_array IS TABLE OF number INDEX BY BINARY_INTEGER;
2、TYPE 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;
这里面重要的关键字是INDEX BY BINARY_INTERGET,没有这个关键字,那么集合将是一个嵌套表。
element_type可以是任何合法的PL/SQL数据类型,包括:PLS/INTEGER、SIGNTYPE、和BOOLEAN。
其他的集合类型对数据库的数据类型都有限制,但Index_by表不能存储在数据库中,所以没有这些限制。
记录的定义—— b、记录的使用.txt
记录的index-by表:
注意:赋值
方法一:
DECLARE
TYPE 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
方法二:
DECLARE
TYPE 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 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;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14613712/viewspace-616670/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14613712/viewspace-616670/