oracle表集合,Oracle中集合的使用

集合@H_403_1@

两个表通常使用外键建立数据之间的关联,相对于这样的方式访问数据库,存储在集合中的数据可以更快的被访问。常用的集合类型:

index-by表

嵌套表

可变数组

index-by表

index-by表类似C语言中的数组,但是元素顺序并没有按照特定的顺序排列。元素的个数只受到BINARY_INTEGER的下标大小限制。

typetabletypeIStableofINDEXBYbinaru_interger;

--typetable:定义的新类型类型名

--type:定义index-by表的类型

typeCountry_NameIStableofCOUNTRIES.COUNTRIES_NAME%TYPE

--声明使用类型

INDEXbybinary_integer;

--声明变量

v_Name Country_Name;

--赋值操作

begin

v_Name(1):='China';

v_Name(2):='AnHui';

v_Name(3):='HeFei';

v_Name(-2):='SuZhou';

v_Name(6):='SiXian';

end;

调用没有赋值的元素

declare

typeStudyTabIStableofvarchar(20)indexbybinary_integer;

v_StudyTab StudyTab;

begin

--使用循环赋值

forv_CountIN1..5Loop

v_StudyTab(v_Count):=v_Count*100;

endloop;

--使用循环取值

forv_Countin1..6loop

DBMS_OUTPUT.put_line(v_StudyTab(v_Count));

endloop;

end;

--上面赋值的时候只赋了5个值,但是取值的时候取了6个值,报错

--:未找到数据

嵌套表

嵌套表和index-by表相比少了indexbybinary_integer子句。这也是区分两种表的区别。

--嵌套表声明语法

typetable_nameIStableoftable_type[notnull];

--嵌套表的初始化

declare

typeStudyTabIStableofvarchar(20);

v_StudyTab StudyTab:=StudyTab('Tom','Jack','Rose');

begin

forv_CountIN1..3loop

DBMS_OUTPUT.put_line(v_StudyTab(v_Count));

endloop;

end;

² index-by表:如果声明类型之后,再声明一个index-by表变量类型,如果没有给

该表赋值,那么这个表就是空的,后面可以继续添加

² 嵌套表:声明嵌套表变量类型时,如果表中没有任何元素,会初始化为null,并且

是只读的,如果再添加元素就会出现错误

ERROR

初始化为null后添加元素:引用未初始化的收集

初始化赋值后添加元素:下标超出数量

元素的序列

嵌套表和index-by表很相似,但是嵌套表在结构上是有序的,index-by表是无序的,给嵌套表赋值,下标从1开始,而且依次递增。

declare

typeNumTabisTableofNumer(4);

v_Num NumTab:=NumTab(1,2,4,5,7,9);

begin

forv_CountIN1..6loop

DBMS_OUTPUT.put_line('v_Num('||v_Count||')='||v_Num(v_Count));

ENDLOOP

END;

上面赋值后的下标依次是:1,2,3,4,5,6

可变数组

可变数组声明

---数组声明语法---

typetype_nameIS{varray|varyingarray}(maxinum_size)

OFelement_type[notnull];

--type_name:可变数组的类型名

--maxinum_size:可变数组元素个数的最大值

--element_type:数组元素的类型

---创建一个数组---

declare

--包含星期数组

typeDatesISvarray(7)OFvarchar2(10);

--包含月份数组

typeMonthsISvarray(12)OFvarchar2(10);

---数组的初始化---

declare

typeDatesISvarray(7)OFvarchar2(10);

v_Dates Dates:=Dates('Monday','Tuesday','Wednesday');

begin

DBMS_OUTPUT.put_line(v_Dates(1));

DBMS_OUTPUT.put_line(v_Dates(2));

DBMS_OUTPUT.put_line(v_Dates(3));

end;

集合的属性和方法

index-by表,嵌套表,可变数组是对象类型,本身具有属性和方法。

1.count:返回集合中数组元素的个数

2.delete:删除集合中一个或多个元素

delete—删除所有元素

delete(x)—删除第x位置的元素

delete(x,y)—删除两个位置之间的元素

3.extist:判断集合中元素是否存在

extists(x)—判断x位置的元素是否存在

4.extend把元素添加到集合末端

extend把一个null元素添加到集合中

extend(x)—将x个null元素添加到集合的末端

extend(x,y)—将x个位于y的元素添加到集合的末端

5.first和last:first返回集合的第一个元素位置,last返回集合的最后一个元素位置

6.limit:返回集合中最大元素的个数,嵌套表没有上限,返回null

7.next(x),prior(x):返回x处元素的前后的元素

8.trim:删除几个末端的元素

trim—从几个末端删除一个元素

trim(x)—从几个末端删除x个元素,x小于集合的count总数

declare

typeDatesISvarray(7)OFvarchar2(10);

v_Dates Dates:=Dates('Monday','Wednesday');

begin

DBMS_OUTPUT.put_line(v_Dates.Count);

DBMS_OUTPUT.put_line(V_Dates.last);

end;

总结

以上是编程之家为你收集整理的Oracle中集合的使用全部内容,希望文章能够帮你解决Oracle中集合的使用所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值