記錄 在 pl/sql 中可以定義三種類型的記錄 : 顯式定義的記錄,面向數(shù)據(jù)庫表的記錄,面向游標(biāo)的記錄。
記錄的定義其語法如下: Type record_type_name is record( Field_name1 datatype not null default )
例子: Type person_rec is record ( Name varchar2(100); Address varchar2(200); ); 記錄類型變量的聲名 vperson person_rec;
type …record 只是一種操象的定義,因此,它不能由它自己使用, type.. record 不會占用任何資源,直到專名該類型的變量時才占用資源
記錄類型的使用 記錄類型的變量定義以后,接下來就是使用記錄來處理數(shù)據(jù)。 1 、訪問記錄中的遠素 2 、測試記錄是否相等 記錄比較應(yīng)比較完記錄的每個字段 , 看它們是否相等,把記錄看作整體來比較的做的作法是錯誤的。 記錄的使用就像一個對象??梢詫λM行賦值, oracle 9i 中有幾種賦值方法: 1) 對各個字段賦值 2) 使用 select into 語句填充一個記錄 3) 使用 fetch into 語句填充一個記錄 4) 使用一個記錄為另一個記錄賦值(聚集賦值)
其它記類型 1 面向表的記錄類型 定義 : Record_var_name table_name%rowtype; 使用: Select * into record_var_name from hrc_tab where id=? 2 面向游標(biāo)的記錄類型 Declare Cursor csr_hrc is select * from hrc_tab order by 1; hrc_rec csr_hrc%rowtype; begin …….loop Fetch csr_hrc into hrc_rec Exit when csr_hrc%not found ….. End loop; end; 涉及整個 pl/sql 記錄的 DML 操作(特指 insert ,update 和 select ) Insert into hrc_tab values record_var_name
Update hrc_tab set ROW=record_var_name where hrc_code=’
Index-by
表
Index-by 表是一同一個與數(shù)組類似的同質(zhì)元素的集合組成的一種復(fù)合數(shù)據(jù)類型。集合中的元素稀 分布且沒有限定邊界,只是由一個整數(shù)索引將其連接在一起。
定義 Index-by 表的型 Type table_name_type is table of type [not null] index by binary_integer 下面是一個聲明這種類型的示例 Type num_tab is table of number index by binary_integer 聲明表類型的變量 V_num_tab num_tab;
Index-by
表的使用
index-by 表是兩列的(一列索引,另一列是對應(yīng)的值)結(jié)構(gòu), index-by 是 pl/sql 特有,所以在 sql 中它們自然就不可用,另外,也不能存儲在數(shù)據(jù)庫中,這樣導(dǎo)致不能在 index-by 表中使用 select ,insert ,update 和 delete 等 SQL DML 操作。對 index-by 表來說沒有 commit 或 rollback ,一個例子: declare type num_tab is table of number index by binary_integer; v_example_tab num_tab; v_num number:=13; begin v_example_tab(1):=1001; v_example_tab (0):=1002; v_example_Tab(-10):=1003 v_example_tab(v_num):=1004p; dbms_output.put_line(to_char(v_example_tab(-10))|| …..) end;
可以使用任何與 binary_integer 相兼容的文字,變量或表達式作為 index-by 表的索引
可樣也可以把一個 index-by 表賦值給另一個 index-by 表。 declare type num_tab is table of number index by binary_integer; v_example_tab1 num_tab; v_example_tab2 num_tab; begin v_example_tab1:= v_example_tab2; end;
在 index-by 表中只有在賦值時才可以創(chuàng)建行,因些在賦值以前,行是一存在的,這是因為 index-by 表沒有上下界,訪問沒定義的行會出現(xiàn) N)_DATA_FOUND 行。
Index-by 表的填充有三種方法: 1 通過賦值創(chuàng)建元素行, 2 使用 loop 為 index-by 表的行賦值 3 用一個 index-by 表為另一個 index-by 表賦值 第一種方法前面用了,第二種方法就是一個循環(huán)了,如 : Declare Type num_tab is table of number index by binary_integer; V_Example_tab num_tab; Begin For idx in 1..10 loop V_example_tab(idx) :=(2*idx)+1 End loop; End;
刪除 Index-by 表 有兩種方法: 1、 定義一下與已填充的 index-by 表類型相同的空的 index-by 表,然后用該表執(zhí)行聚集賦值 2、 使用 index-by 表的 delete 方法。 Index-by 表的方法:
方法使用例子: If v_example.exists(100) then dbms_output.put_line(to_char(v_example.exists(100))); End if ;
For udx in 1..v_example.count loop // 用這種方法必須要確定行是連續(xù)填充的,下界是一個 // 定的值。 Dbms_output.put_line(to_char(v_example_tab(idx))); End loop;
V_example_tab.delete(1) ; // 刪除第一個索引的記錄 V_example_tab.delete(2,5);// 刪除第 2 至第 5 個索引記錄 V_example_tab.delete;// 刪除所有記錄
使用 first,last,next 方法的例子 Idx:=v_example_tab.first;
Dbms_output.put_line(); Exit when idx:=v_example_tab.last; Idx:=v_example_tab.next(); End loop;
這樣遍歷一個 index-by 表是最好的,表的記錄可以不連續(xù)。
記錄的
Index-by
表
定義 index-by 表的幾個步驟
1、 定義記錄類型 2、 定義記錄類型的表類型 3、 定義表類型的變量
一個例子: Declare Type hrc_org_Rdc is record( Hrc_org_id number, Hrc_descr var_char2(200) ) Type hrc_org_tab is table of hrc_org_rec index by binary_integer; Begin Null; End;
聯(lián)合數(shù)組
在 oracle 9i release 2 中,可以使用 varchar2 類型的索引代規(guī) binary_integer 類型的索引來定義 index-by 表,用 varchar2 索引作為數(shù)據(jù)庫表的關(guān)鍵字,可以提高數(shù)據(jù)庫的性能。 例子: Declare Type site_ary is table of number index by varchar2(20); V_example_array site_ary; Begin V_example_array(‘xx’):=10; V_example_array(‘yy’):=200; End;
|
|