關於oracle的數組


自定義數組

 

單維數組

語法: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個元素


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM