日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Oracle 原理: 集合数组,集合属性,is table of 用法,bulk collect into,IS RECORD用法

發(fā)布時(shí)間:2024/10/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 原理: 集合数组,集合属性,is table of 用法,bulk collect into,IS RECORD用法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

數(shù)組分為固定長(zhǎng)度數(shù)組和可變長(zhǎng)度數(shù)組,都是集合,且數(shù)組的起始下標(biāo)是從1開(kāi)始的,這和其他高級(jí)程序語(yǔ)言不太一樣。利用圓括號(hào)‘(下標(biāo))‘來(lái)獲取值或者進(jìn)行賦值。

一、固定長(zhǎng)度的數(shù)組

固定長(zhǎng)度的數(shù)組類型的聲明 為 TYPE?類名?IS VARRAY(元素個(gè)數(shù)) OF? 元素類型;

declare type arry3 is varray(3) of varchar2(4); ---固定數(shù)組類型聲明 sexsList arry3 :=arry3('男','女','人妖'); --固定數(shù)組變量定義 usr_input number; beginusr_input := &sexnum; --讀取用戶輸入sexsList(3) :='未知';if usr_input <=sexsList.count and usr_input >0 thendbms_output.put_line('你好'||sexsList(usr_input)); --用變量名(下標(biāo)) 的形式賦值 := 或者讀取end if; end ; /

執(zhí)行后輸入:3 輸出得

二、數(shù)組集合 count ,first ,last ,next() ,exists()的區(qū)別

declaretype varr_num is table of number INDEX BY PLS_INTEGER;vnum varr_num;vn number ; beginvnum(2) := 2000;vnum(3) := 3000;vnum(10) := 10000;vnum(100) :=20000;dbms_output.put_line('count:' ||vnum.count); dbms_output.put_line('first:' ||vnum.first); dbms_output.put_line('last:' ||vnum.last); for i in 1..vnum.count loopif not vnum.exists(i) thendbms_output.put_line('不能找到vnum.count('||i||'):'); else dbms_output.put_line('vnum.count('||i||'):' ||vnum(i)); end if ;end loop;vn :=vnum.first;while vn is not null loopdbms_output.put_line('vnum('||vn||'):' ||vnum(vn)||'vnum.next('||vn||'):' ||vnum.next(vn));vn :=vnum.next(vn);end loop;dbms_output.put_line('vnum.next('||9||'):' ||vnum.next(9));end; /

輸出結(jié)果

由此可以看出在集合屬性中,?

first : 第一個(gè)非空值的下標(biāo)

last : 最后一個(gè)非空值的下標(biāo)

count: 集合非零元素個(gè)數(shù)

next(i) :從i開(kāi)始的下一個(gè)非空元素的下標(biāo)

exists(i) :? 下標(biāo)i 是否有值? 因?yàn)槿≡貫榭諘r(shí)會(huì)報(bào)錯(cuò),所以??vnum(i) is not null 無(wú)意義。

-------------------------------------------------------

新建表DEPARTMENT_TBL如下:

存儲(chǔ)數(shù)據(jù)大致如下

----------------------------------------------------------------------

三、可變長(zhǎng)度數(shù)組?IS TABLE?OF??和? BULK COLLECT INTO??

declaretype varr_vchar is table of varchar2(20); --varchar2(20)的可變長(zhǎng)度數(shù)組deplist varr_vchar ; beginselect department bulk collect into deplist from department_tbl;dbms_output.put('該公司擁有的部門(mén)有:');for i in 1 .. deplist.count loopdbms_output.put_line(deplist(i));end loop; end; /

?

TYPE?類名?IS TABLE?OF? 元素類型? ?[INDEX?BY?BINARY_INTEGER];? ?指明了把結(jié)果集當(dāng)做表;?INDEX?BY?BINARY_INTEGER指明了當(dāng)為number 類型時(shí),下標(biāo)自增長(zhǎng)。如果沒(méi)有指定下標(biāo)自增長(zhǎng)那么就要手動(dòng)extend(i),來(lái)擴(kuò)容數(shù)組大小。

declaretype numbers is table of varchar2(10);m numbers := numbers(); beginm.extend(10);m(3) := '50';m.extend;m.extend;m.extend;m(6) := '60';for i in 1 .. m.count loopdbms_output.put_line(m(i));end loop;dbms_output.put_line('count:' ||m.count); dbms_output.put_line('first:' ||m.first); dbms_output.put_line('last:' ||m.last); end; /

輸出結(jié)果:

SELECT? 表字段集? BULK COLLECT INTO 類名 from 表名 ;? ? ? ? ? ? ? 將數(shù)據(jù)集直接賦值給類變量,其效率比游標(biāo)塊,但是比游標(biāo)更消耗內(nèi)存。

declaretype varr_vchar is table of department_tbl%rowtype;deplist varr_vchar ; beginselect department,ALL_SALARY,LEADERS bulk collect into deplist from department_tbl;dbms_output.put('該公司擁有的部門(mén)有:');for i in 1 .. deplist.count loopdbms_output.put_line(deplist(i).department ||'的總薪資為'||deplist(i).ALL_SALARY ||'元');end loop; end; /

輸出結(jié)果:

四、自定義結(jié)果集(對(duì)象數(shù)組):

結(jié)果集是可以自定義的,相當(dāng)于面向?qū)ο蟪绦蚶锏?長(zhǎng)度可變的對(duì)象數(shù)組。

TYPE?類名? ?IS RECORD (成員變量1? 類型 , 成員變量2? 類型 .......)?;?

declaretype rec_dep is record (department varchar2(10),proportion number);type varr_vchar is table of rec_dep;deplist varr_vchar ;sumsalary number ; ----公司總薪資 beginselect sum(ALL_SALARY) into sumsalary from department_tbl; ---強(qiáng)行轉(zhuǎn)換select department,cast(ALL_SALARY/sumsalary as number(10,9))bulk collect into deplist from department_tbl;for i in 1 .. deplist.count loopdbms_output.put_line(deplist(i).department ||'的部門(mén)總薪資占公司比為'||deplist(i).proportion ||'%');end loop; end; /

?

總結(jié)

以上是生活随笔為你收集整理的Oracle 原理: 集合数组,集合属性,is table of 用法,bulk collect into,IS RECORD用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。