自定義數組
單維數組
語法:TYPE varray_name IS VARRAY(size) OF element_type [NOT NULL];
type dw_varray is varray(6) of varchar2(20); #定義六個元素的數組,字符類型為varchar2(20),
date_one dw_varray := dwvarray() #初始化數組;括號中可帶值;
多維數組
先定義記錄類型:(適用於自定義字段的數組)
語法
TYPE record_name IS RECORD(
v1 data_type1 [NOT NULL] [:= default_value ],
v2 data_type2 [NOT NULL] [:= default_value ],
...... vn data_typen [NOT NULL] [:= default_value ] );
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 ); #以上根據某表字段類型創建3個元素的記錄類型,只能存一條記錄!
TYPE emp_type_array IS TABLE OF emp_type INDEX BY BINARY_INTEGER; #定義一個新類型為組數,實則將3個元素的記錄封裝成一個元素,與固定長度數組相比,該類型為不限長數組,可以存不限定個元素。
TYPE emp_type_array IS TABLE OF employee_table%rowtype INDEX BY BINARY_INTEGER; (這樣定義無需先定義記錄類型了)
具體應用:
emp_rec_array emp_type_array;
emp_rec emp_type;
賦值:
emp_rec.emp_id := 300000000;
emp_rec.emp_name := 'Barbara';
emp_rec.emp_gender := 'Female';#3元素類型的賦值
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;
另一種方法賦值:(批量賦值)
select emp_id,.emp_name,emp_gender bulk collect into emp_rec_array from employee_table
遍歷多維數組:
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;
將自定義數組作為參數:
數組的方法:
COUNT 返回集合中元素的個數
DELETE 刪除集合中所有元素
DELETE(x) 刪除元素下標為x的元素 對VARRAY非法
DELETE(x,y) 刪除元素下標從X到Y的元素 對VARRAY非法
EXIST(x) 如果集合元素x已經初始化,則返回TRUE, 否則返回FALSE
EXTEND 在集合末尾添加一個元素 對Index_by非法
EXTEND(x) 在集合末尾添加x個元素 對Index_by非法
EXTEND(x,n) 在集合末尾添加元素n的x個副本 對Index_by非法
FIRST 返回集合中的第一個元素的下標號,對於VARRAY集合始終返回1。
LAST 返回集合中最后一個元素的下標號, 對於VARRAY返回值始終等於COUNT.
LIMIT 返回VARRY集合的最大的元素個數 Index_by集合和嵌套表無用
NEXT(x) 返回在第x個元素之后及緊挨着它的元素值,如果x是最后一個元素,返回null.
PRIOR(x) 返回在第x個元素之前緊挨着它的元素的值,如果x是第一個元素,則返回null。
TRIM 從集合末端開始刪除一個元素 對於index_by不合法 RIM(x) 從集合末端開始刪除x個元素