http://topic.csdn.net/t/20060112/17/4513467.html
集合:是具有相同定義的元素的聚合。Oracle有兩種類型的集合:
可變長數組(VARRAY):可以有任意數量的元素,但必須預先定義限制值。
嵌套表:視爲表中之表,可以有任意數量的元素,不需要預先定義限制值。
在PL/SQL中是沒有數組(Array)概念的。但是如果程序員想用Array的話,就得變通一下,用TYPE 和Table of Record來代替多維數組,一樣挺好用的。
emp_type 就好象一個table 中的一條record 一樣,裏面有id, name,gender等。emp_type_array 象個table, 裏面含有一條條這樣的record (emp_type),就象多維數組一樣。
--單維數組
- SQL code
-
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;
-
-
--多維數組
- SQL code
-
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 */
|