Oracle陣列的使用

2021-04-22 02:49:35 字數 4834 閱讀 2794

下面這組資訊比較有用,列出來以備參考:

除了建構函式外,集合還有很多內建函式,這些函式稱為方法。

呼叫方法的語法如下:

collection.method

下表中列出oracle中集合的方法

方法 描述 使用限制

count 返回集合中元素的個數

delete 刪除集合中所有元素

delete() 刪除元素下標為x的元素,如果x為null,則集合保持不變          對varray非法

delete(,) 刪除元素下標從x到y的元素,如果x>y集合保持不變             對varray非法

exist() 如果集合元素x已經初始化,則返回true, 否則返回false

extend 在集合末尾新增乙個元素                                       對index_by非法

extend() 在集合末尾新增x個元素                                      對index_by非法

extend(,) 在集合末尾新增元素n的x個副本                              對index_by非法

first 返回集合中的第乙個元素的下標號,對於varray集合始終返回1。

last 返回集合中最後乙個元素的下標號, 對於varray返回值始終等於count.

limit 返回varry集合的最大的元素個數,對於巢狀表和對於巢狀表和index_by為null index_by集合無用

next() 返回在元素x之後及緊挨著它的元素的值,如果該元素是最後乙個元素,則返回null.

prior() 返回集合中在元素x之前緊挨著它的元素的值,如果該元素是第乙個元素,則返回null。

tri m 從集合末端開始刪除乙個元素                                    對於index_by不合法

trim() 從集合末端開始刪除x個元素                                    對index_by不合法

使用例項:

set serveroutput on

declare

type my_text_table_type is table of varchar2(200)

index by binary_integer;

l_text_table my_text_table_type;

l_index number;

begin

for emp_rec in (select * from emp) loop

l_text_table(emp_rec.empno):=emp_rec.ename;

end loop;

l_index:= l_text_table.first;--使用first方法

loop

exit when l_index is null;

dbms_output.put_line(l_index ||』:』|| l_text_table(l_index));

l_index :=l_text_table.next(l_index);

end loop;

end;

例項:create or replace procedure sample  

is  

type r_rec is record(int     number(6,2), chr    varchar2(100));

type t_rec is table of r_rec index by binary_integer;

a_zei t_rec;    

ix      number(10);    

begin  

for ix in 1..1000 loop  

a_zei(ix).int := ix;

a_zei(ix).chr := to_char(a_zei(ix).int,'9,999,999.99');  

end loop;     

end;  

或create or replace procedure p_emp

istype t_emp is table of emp%rowtype index by binary_integer;

a_emp t_emp;

i        binary_integer := 0;

begin   

for rec in (select empno,ename from emp) loop

i := i + 1;

a_emp(i).empno := rec.empno;

a_emp(i).ename := rec.ename;

end loop;   

for k in 1..i loop

dbms_output.put_line( a_emp(k).empno || '       ' || a_emp(k).ename);

end loop;

end;

集合:是具有相同定義的元素的聚合。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;

--多維陣列

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

用下面語句宣告陣列型別

type intarray is varry(30) of integer;

用下面語句宣告乙個陣列變數

declare

a intarray;用下面語句宣告陣列型別

type intarray is varry(30) of integer;

用下面語句宣告乙個陣列變數

declare

a intarray;用下面語句宣告陣列型別

type intarray is varry(30) of integer;

用下面語句宣告乙個陣列變數

declare

a intarray;

Oracle陣列的使用

下面這組資訊比較有用,列出來以備參考 除了建構函式外,集合還有很多內建函式,這些函式稱為方法。呼叫方法的語法如下 collection.method 下表中列出oracle中集合的方法 方法 描述 使用限制 count 返回集合中元素的個數 delete 刪除集合中所有元素 delete 刪除元素下...

Oracle陣列的使用

下面這組資訊比較有用,列出來以備參考 除了建構函式外,集合還有很多內建函式,這些函式稱為方法。呼叫方法的語法如下 collection.method 下表中列出oracle中集合的方法 方法 描述 使用限制 count 返回集合中元素的個數 delete 刪除集合中所有元素 delete 刪除元素下...

oracle陣列使用例項

一維陣列 set serverout on size 100000 declare type t varray is varray 3 of varchar2 20 v var t varray t varray i love study begin for i in 1 v var.count l...