濮阳杆衣贸易有限公司

主頁 > 知識庫 > Oracle 數(shù)組的學(xué)習(xí) 小知識也要積累,養(yǎng)成好的學(xué)習(xí)態(tài)度

Oracle 數(shù)組的學(xué)習(xí) 小知識也要積累,養(yǎng)成好的學(xué)習(xí)態(tài)度

熱門標(biāo)簽:貴陽智能電銷機(jī)器人官網(wǎng) 外呼系統(tǒng)鄭州 地圖標(biāo)注付款了怎么找不到了 百度地圖標(biāo)注員是干什么 北京外呼系統(tǒng)公司排名 沈陽400電話是如何辦理 溫州人工外呼系統(tǒng) 外呼系統(tǒng)口號 北京營銷外呼系統(tǒng)廠家
提叻一個(gè)代碼段,要人幫助解釋一下。
代碼段如下:
復(fù)制代碼 代碼如下:

declare
type t_indexby is table of number
index by binary_integer;
type t_nesteed is table of number;
type t_varray is varray(10) of number;
v_indexby t_indexby;
v_nested t_nested;
v_varray t_varray;
begin
v_indexby(1):=1;
v_indexby(2):=2;
v_nested:=t_nested(1,2,3,4,5);
v_varray:=t_varray(1,2);
end;

一段很簡單的有關(guān)Oracle里數(shù)組的sample代碼??粗@段由代表性的代碼,不由想起自己以前獨(dú)自摸索Oracle里數(shù)組類型的那種不弄明白決不姑息的激情。
這段代碼也還不錯(cuò),通過簡單的實(shí)例就把主要的數(shù)組類型都羅列出來叻,好的素材 不由又激發(fā)其我回答寫寫的欲望叻,所以也不吝指力,總結(jié)叻一番,也順便填補(bǔ)一下我以前忘記歸納總結(jié)的空缺
這段代碼,收羅叻Oracle里數(shù)組的使用方式
1. index by table
2. nested table
3. varray 可變數(shù)組
這里是Oracle文檔里對這三種數(shù)組類型的介紹
An index-by table is the most flexible and generally best-performing collection type for use inside PL/SQL programs.
A nested table is appropriate for large collections that an application stores and retrieves in portions.
A VARRAY is appropriate for small collections that the application stores and retrieves in their entirety.
這里是對通過應(yīng)用性上的對他們?nèi)叩母爬?,好像沒有給我們太直接的影響,還是讓我們先對其了解,這里的應(yīng)用性上體現(xiàn)的東西也就好理解叻。
sample code中以對三種不同的type定義的方式開始。
type t_indexby is table of number index by binary_integer; -- indexed by table
type t_nesteed is table of number; -- nested table
type t_varray is varray(10) of number; -- varray
上兩句和后一句有明顯的不同,沒有定義長度,而varray定義叻長度。varray有長度限制,訪問是超過長度的話將提示越界的錯(cuò)誤。而indexed by table和nested table顯然沒有這個(gè)限制,不過對于indexed by table和nested table,他們兩個(gè)也是有區(qū)別的。
上面sample的后部分就描述了兩者的區(qū)別,對于index by table來說,這里已經(jīng)指定了index的類型,直接用index的類型的變量做索引來標(biāo)識著每個(gè)元素,而不需要擴(kuò)展大小。這個(gè)功能有些像java里的map(有區(qū)別就是這里key是有順序的),而nested table能則完全和list一樣
我們通過sample來看看
v_indexby(1):=1;
v_indexby(2):=2;
這里分別在v_indexby里加了兩個(gè)元素,為1, 1和2,2,注意這里的(1),(2)和后面nested table已經(jīng)varray里的不一樣,
這里,我把它理解為key,而不是元素的序號。所以index by這里的下標(biāo),不一定是連續(xù)的,可以跳躍,而另兩者就不同,另外兩個(gè)是名符其實(shí)的數(shù)組對象了,下標(biāo)表示的就是元素的序號,和java不同,從1開始。
v_nested:=t_nested(1,2,3,4,5);
v_varray:=t_varray(1,2);
這里分別是定義了5個(gè)和2個(gè)元素的數(shù)組。
v_nested:=t_nested(1,2,3,4,5); 5個(gè)元素,值為1,2,3,4,5
v_varray:=t_varray(1,2); 2個(gè)元素 值為1,2
強(qiáng)調(diào)一下,對于nested table來說,需要使用extend來擴(kuò)展數(shù)組,添加元素的時(shí)候,而varrray不需要(已經(jīng)知道長度了,定義的時(shí)候)。
v_nested.extend; v_nested(v_nested.count) := 6;
大家在這里基本上已經(jīng)可以看到他們的區(qū)別了,index by table在結(jié)構(gòu)上和nested table以及Varray有著本質(zhì)的不同,那么勢必使用的時(shí)候肯定不同了。由于index by table下標(biāo)并不是序號,所以我們只能通過key來訪問了,這里和java倒是一樣的。
上面的例子里,沒有提供,而且我在網(wǎng)上找了很多的介紹都沒有詳細(xì)給出過index by table的遍歷的方法的,這里我自己寫了一個(gè)sample,供大家學(xué)習(xí)參考
復(fù)制代碼 代碼如下:

declare
type t_array is table of varchar2(1000) index by binary_integer;
v_array t_array;
v_idx number;
begin
v_array(1) := 'a1';
v_array(2) := 'a2';
v_array(-1) := 'a-1'; -- 是key所以可以為負(fù)數(shù)
v_idx := v_array.first;
loop
exit when v_idx is null;
dbms_output.put_line(v_array(v_idx));
v_idx := v_array.next(v_idx);
end loop;
end;
/

結(jié)果
a-1
a1
a2
注意這里的方法,first,返回第一個(gè)key,next()返回下一個(gè)key
對于nested table來說,下標(biāo)是序號,是不能為負(fù)數(shù)的
復(fù)制代碼 代碼如下:

declare
type t_array is table of varchar2(1000);
v_array t_array;
v_idx varchar2(1000);
begin
v_array := t_array(); --- 一定要先初始話。
v_array.extend; ---- 擴(kuò)展數(shù)組
v_array(1) := 'a1';
v_array.extend;
v_array(2) := 'a2';
v_array.extend;
v_array(3) := 'a-1'; ---- v_array(-1) := 'a-1'; 將出錯(cuò)
v_idx := v_array.first;
loop
dbms_output.put(v_idx||' ');
exit when v_idx is null;
dbms_output.put_line(v_array(v_idx));
v_idx := v_array.next(v_idx);
end loop;
end;
/

看看nested tabled的訪問也可以和上面一樣,當(dāng)然也可以用更簡單的方法來遍歷
復(fù)制代碼 代碼如下:

for i in 1..v_array.count loop
dbms_output.put(i||' ');
dbms_output.put_line(v_array(i));
end loop;

其實(shí)可以看到和java里的list的訪問很類似了。
這個(gè)知識點(diǎn),很多人都寫過sample,內(nèi)容不是很多,但是小知識也要積累,勸學(xué)里 “不積跬步,無以至千里,不積小流,無以成江?!保瑢W(xué)習(xí)固然如此,而Oracle的學(xué)習(xí)更應(yīng)如此。 以前的庸惰,我今天還是還叻。 “走江湖的,遲早要還的”。
Oracle對Index by 數(shù)組的官方介紹
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28843/tdddg_procedures.htm#insertedID8
您可能感興趣的文章:
  • Oracle RMAN快速入門指南
  • Oracle PL/SQL入門慨述
  • Oracle PL/SQL入門案例實(shí)踐
  • 基于Oracle的面向?qū)ο蠹夹g(shù)入門基礎(chǔ)簡析開發(fā)者網(wǎng)絡(luò)Oracle
  • Oracle PL/SQL語言入門基礎(chǔ)
  • Oracle存儲(chǔ)過程入門學(xué)習(xí)基本語法
  • 比較SQL Server與Oracle、DB2數(shù)據(jù)庫的一些知識
  • oracle 合并查詢 事務(wù) sql函數(shù)小知識學(xué)習(xí)
  • oracle復(fù)習(xí)筆記之PL/SQL程序所要了解的知識點(diǎn)
  • Oracle知識整理筆記

標(biāo)簽:淮北 包頭 通遼 衢州 潮州 溫州 衡水 定西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle 數(shù)組的學(xué)習(xí) 小知識也要積累,養(yǎng)成好的學(xué)習(xí)態(tài)度》,本文關(guān)鍵詞  Oracle,數(shù)組,的,學(xué)習(xí),小,知識,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle 數(shù)組的學(xué)習(xí) 小知識也要積累,養(yǎng)成好的學(xué)習(xí)態(tài)度》相關(guān)的同類信息!
  • 本頁收集關(guān)于Oracle 數(shù)組的學(xué)習(xí) 小知識也要積累,養(yǎng)成好的學(xué)習(xí)態(tài)度的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    东丽区| 汝城县| 卓资县| 永州市| 刚察县| 康定县| 贵港市| 梅州市| 武平县| 阆中市| 苏尼特左旗| 邵阳市| 青河县| 灌南县| 越西县| 舒城县| 长武县| 珲春市| 大悟县| 南溪县| 类乌齐县| 乳源| 武强县| 高邮市| 封丘县| 忻城县| 民县| 孙吴县| 隆子县| 定州市| 吴桥县| 个旧市| 胶南市| 涞水县| 龙里县| 内乡县| 临猗县| 得荣县| 乳源| 东山县| 中牟县|