Oracle PL SQL集合增強

2021-09-05 13:43:00 字數 2394 閱讀 7765

[oracle] pl/sql集合增強

builder.com

29/12/2004

url:

oracle release 2 非常有力地增強了pl/sql 集合功能,它可以對以前的發布版本進行**維護。例如,可以在release 2 中將pl/sql 集合用作乙個單一的引數,從而避免了使用一長串單個的字段作為引數。

另外乙個優點是記錄的集合現在可以是bulk collection into 子句的目標。而在release 2 以前,我們必須為返回的每個列建立乙個集合。例如:

declare

type deptno_coll is table of dept.deptno%type;

type dname_coll is table of dept.dname%type;

type loc_coll is table of dept.loc%type;

deptno_list deptno_coll;

dname_list dname_coll;

loc_list loc_coll;

begin

select * bulk collect into deptno_list,dname_list,loc_list from dept;

end;

在release 2中變成了:

declare

type dept_coll is table of dept%rowtype;

dept_list dept_coll;

begin

select * bulk collect into dept_list from dept;

end;

注意這裡不再是對欄位名的引用。如果dept 表的字段個數或者名稱被修改,也不需要對第二段示例**進行改動。這段**還比舊版本易於維護。然而,應用程式需要乙個release 2 資料庫來編譯。

現在可以使用記錄以集合方式將一行資料插入到乙個表中。在release 2 之前,必須插入到表中乙個pl/sql 記錄然後再單獨地確定每乙個字段,作法如下:

declare

dept_row dept%rowtype;

begin

/* populate dept_row . . . */

insert into dept values (dept_row.deptno,dept_row.dname,dept_row.loc);

end;

而在release 2中可以將插入語句簡化為:

insert into dept values dept_row;

記錄可以以集合方式更新乙個表中的資料。像插入語句一樣,以前必須單獨地更新每乙個字段:

update dept

set deptno = dept_row.deptno,

dname = dept_row.dname,

loc = dept_row.loc

where deptno = dept_row.deptno;

而在release 2中,則可以根據在記錄中的位置來更新整條資料:

update dept set row = dept_row where deptno = dept_row.deptno;

(注意「set row」是乙個新子句。)

可以使用記錄從dml 語句的returning 子句中檢索資訊。通常在更新資料時保持乙個本地副本以備以後的pl/sql 操作會比較有用。在release 2 以前,我們可以在計算和呼叫完成之後使用returning 子句將資料儲存到某個地方。而在release 2 中,就可以把資料儲存到一條記錄中。例如,下面是release 2 之前的作法:

declare

foorow footab%rowtype;

begin

insert into footab (foono,fooname) values (fooseq.nextval,'foo')

returning foono,fooname into foorow.foono,foorow.fooname;

end;

而現在可以把插入語句簡化為:

insert into footab (foono,fooname) values (fooseq.nextval,'foo')

returning foono,fooname into foorow;

這些增強使得語法更加易讀,並能幫助我們避免由於在返回語句中將表匹配錯誤所引起的程式錯誤。但是要記住這些增強要依賴於表和記錄中第乙個欄位的物理位置。如果乙個表的字段位置發生變化,那麼欄位的順序也會變化。因此,在乙個資料庫表中使用rowtype 匹配欄位比顯式地列出欄位名要好。

oracle dev tips library

. 李寧

集合(list,map,set,增強for)

增強for 組成部分 例如 set set newhashset for string str set 冒號左右兩邊內容 integer a inter 左側 是被遍歷的 集合或者 陣列 裡面的單個元素型別 右側 就是被遍歷的 集合 或者陣列的名字 list和map的區別 list 是儲存單列資料的...

集合 三 增強for迴圈 for each

格式 for 元素的資料型別 變數 collection集合 or 陣列 增強for迴圈 底層使用的也是迭代器,使用for迴圈的格式,簡化了迭代器的書寫 collectionextends iterator 所有的單列集合都可以使用增強for public inte ce iterator實現這個介...

Java8增強的Map集合

map用於儲存具有對映關係的資料,因為map集合中儲存著兩組值,一組值用於儲存map裡的key,另外一組值用於儲存map裡的value,key和value都可以是任何引用型別的資料。map裡的key不允許重複,即同乙個map物件的任何兩個key通過equals方法比較總是返回false。key和va...