Oracle中集合的使用

前端之家收集整理的这篇文章主要介绍了Oracle中集合的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

集合

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

index-by表@H_403_4@

嵌套表@H_403_4@

可变数组@H_403_4@

index-by表@H_403_4@

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

type@H_403_4@ tabletype @H_403_4@IS@H_403_4@ @H_403_4@table@H_403_4@ @H_403_4@of@H_403_4@ @H_403_4@INDEX@H_403_4@ @H_403_4@BY@H_403_4@ binaru_interger;@H_403_4@@H_403_4@

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

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

type@H_403_4@ Country_Name @H_403_4@IS@H_403_4@ @H_403_4@table@H_403_4@ @H_403_4@of@H_403_4@ COUNTRIES.COUNTRIES_NAME%@H_403_4@TYPE@H_403_4@@H_403_4@

--@H_403_4@声明使用类型@H_403_4@@H_403_4@

INDEX@H_403_4@ @H_403_4@by@H_403_4@ @H_403_4@binary_integer@H_403_4@;@H_403_4@@H_403_4@

--@H_403_4@声明变量@H_403_4@@H_403_4@

v_Name Country_Name;@H_403_4@@H_403_4@

@H_403_4@@H_403_4@

--@H_403_4@赋值操作@H_403_4@@H_403_4@

begin@H_403_4@@H_403_4@

v_Name(@H_403_4@1@H_403_4@):=@H_403_4@'China'@H_403_4@;@H_403_4@@H_403_4@

v_Name(@H_403_4@2@H_403_4@):=@H_403_4@'AnHui'@H_403_4@;@H_403_4@@H_403_4@

v_Name(@H_403_4@3@H_403_4@):=@H_403_4@'HeFei'@H_403_4@;@H_403_4@@H_403_4@

v_Name(-@H_403_4@2@H_403_4@):=@H_403_4@'SuZhou'@H_403_4@;@H_403_4@@H_403_4@

v_Name(@H_403_4@6@H_403_4@):=@H_403_4@'SiXian'@H_403_4@;@H_403_4@@H_403_4@

end@H_403_4@;@H_403_4@@H_403_4@

@H_403_4@

调用没有赋值的元素@H_403_4@

declare@H_403_4@@H_403_4@

type@H_403_4@ StudyTab @H_403_4@IS@H_403_4@ @H_403_4@table@H_403_4@ @H_403_4@of@H_403_4@ @H_403_4@varchar@H_403_4@(@H_403_4@20@H_403_4@) @H_403_4@index@H_403_4@ @H_403_4@by@H_403_4@ @H_403_4@binary_integer@H_403_4@;@H_403_4@@H_403_4@

v_StudyTab StudyTab;@H_403_4@@H_403_4@

begin@H_403_4@@H_403_4@

@H_403_4@--@H_403_4@使用循环赋值@H_403_4@@H_403_4@

@H_403_4@for@H_403_4@ v_Count @H_403_4@IN@H_403_4@ @H_403_4@1@H_403_4@..5 @H_403_4@Loop@H_403_4@@H_403_4@

v_StudyTab(v_Count):=v_Count*@H_403_4@100@H_403_4@;@H_403_4@@H_403_4@

@H_403_4@end@H_403_4@ @H_403_4@loop@H_403_4@;@H_403_4@@H_403_4@

@H_403_4@--@H_403_4@使用循环取值@H_403_4@@H_403_4@

@H_403_4@for@H_403_4@ v_Count @H_403_4@in@H_403_4@ @H_403_4@1@H_403_4@..6 @H_403_4@loop@H_403_4@@H_403_4@

DBMS_OUTPUT.put_line(v_StudyTab(v_Count));@H_403_4@@H_403_4@

@H_403_4@end@H_403_4@ @H_403_4@loop@H_403_4@;@H_403_4@@H_403_4@

end@H_403_4@;@H_403_4@@H_403_4@

@H_403_4@@H_403_4@

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

--@H_403_4@:未找到数据@H_403_4@@H_403_4@

嵌套表@H_403_4@

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

--@H_403_4@嵌套表声明语法@H_403_4@@H_403_4@

type@H_403_4@ table_name @H_403_4@IS@H_403_4@ @H_403_4@table@H_403_4@ @H_403_4@of@H_403_4@ table_type[@H_403_4@not@H_403_4@ @H_403_4@null@H_403_4@];@H_403_4@@H_403_4@

@H_403_4@@H_403_4@

--@H_403_4@嵌套表的初始化@H_403_4@@H_403_4@

declare@H_403_4@@H_403_4@

type@H_403_4@ StudyTab @H_403_4@IS@H_403_4@ @H_403_4@table@H_403_4@ @H_403_4@of@H_403_4@ @H_403_4@varchar@H_403_4@(@H_403_4@20@H_403_4@);@H_403_4@@H_403_4@

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

begin@H_403_4@@H_403_4@

@H_403_4@for@H_403_4@ v_Count @H_403_4@IN@H_403_4@ @H_403_4@1@H_403_4@..3 @H_403_4@loop@H_403_4@@H_403_4@

DBMS_OUTPUT.put_line(v_StudyTab(v_Count));@H_403_4@@H_403_4@

@H_403_4@end@H_403_4@ @H_403_4@loop@H_403_4@;@H_403_4@@H_403_4@

end@H_403_4@;@H_403_4@@H_403_4@

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

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

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

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

@H_403_4@

ERROR@H_403_4@@H_403_4@

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

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

@H_403_4@@H_403_4@

元素的序列@H_403_4@@H_403_4@

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

declare@H_403_4@@H_403_4@

type@H_403_4@ NumTab @H_403_4@is@H_403_4@ @H_403_4@Table@H_403_4@ @H_403_4@of@H_403_4@ Numer(@H_403_4@4@H_403_4@);@H_403_4@@H_403_4@

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

begin@H_403_4@@H_403_4@

@H_403_4@for@H_403_4@ v_Count @H_403_4@IN@H_403_4@ @H_403_4@1@H_403_4@..6 @H_403_4@loop@H_403_4@@H_403_4@

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

@H_403_4@END@H_403_4@ @H_403_4@LOOP@H_403_4@@H_403_4@

END@H_403_4@;@H_403_4@@H_403_4@

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

可变数组@H_403_4@

可变数组声明@H_403_4@

---@H_403_4@数组声明语法@H_403_4@---@H_403_4@@H_403_4@

type@H_403_4@ type_name @H_403_4@IS@H_403_4@ {@H_403_4@varray@H_403_4@|@H_403_4@varying@H_403_4@ @H_403_4@array@H_403_4@}(maxinum_size)@H_403_4@@H_403_4@

@H_403_4@OF@H_403_4@ element_type[@H_403_4@not@H_403_4@ @H_403_4@null@H_403_4@];@H_403_4@@H_403_4@

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

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

--element_type:@H_403_4@数组元素的类型@H_403_4@@H_403_4@

@H_403_4@@H_403_4@

---@H_403_4@创建一个数组@H_403_4@---@H_403_4@@H_403_4@

declare@H_403_4@@H_403_4@

--@H_403_4@包含星期数组@H_403_4@@H_403_4@

type@H_403_4@ Dates @H_403_4@IS@H_403_4@ @H_403_4@varray@H_403_4@(@H_403_4@7@H_403_4@) @H_403_4@OF@H_403_4@ @H_403_4@varchar2@H_403_4@(@H_403_4@10@H_403_4@);@H_403_4@@H_403_4@

--@H_403_4@包含月份数组@H_403_4@@H_403_4@

type@H_403_4@ @H_403_4@Months@H_403_4@ @H_403_4@IS@H_403_4@ @H_403_4@varray@H_403_4@(@H_403_4@12@H_403_4@) @H_403_4@OF@H_403_4@ @H_403_4@varchar2@H_403_4@(@H_403_4@10@H_403_4@);@H_403_4@@H_403_4@


---@H_403_4@数组的初始化@H_403_4@---@H_403_4@@H_403_4@

declare@H_403_4@@H_403_4@

type@H_403_4@ Dates @H_403_4@IS@H_403_4@ @H_403_4@varray@H_403_4@(@H_403_4@7@H_403_4@) @H_403_4@OF@H_403_4@ @H_403_4@varchar2@H_403_4@(@H_403_4@10@H_403_4@);@H_403_4@@H_403_4@

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

begin@H_403_4@@H_403_4@

DBMS_OUTPUT.put_line(v_Dates(@H_403_4@1@H_403_4@)); @H_403_4@@H_403_4@

DBMS_OUTPUT.put_line(v_Dates(@H_403_4@2@H_403_4@)); @H_403_4@@H_403_4@

DBMS_OUTPUT.put_line(v_Dates(@H_403_4@3@H_403_4@));@H_403_4@@H_403_4@

end@H_403_4@;@H_403_4@@H_403_4@

集合的属性方法@H_403_4@

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

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

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

delete—删除所有元素@H_403_4@

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

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

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

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

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

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

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

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

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

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

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

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

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

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

declare@H_403_4@@H_403_4@

type@H_403_4@ Dates @H_403_4@IS@H_403_4@ @H_403_4@varray@H_403_4@(@H_403_4@7@H_403_4@) @H_403_4@OF@H_403_4@ @H_403_4@varchar2@H_403_4@(@H_403_4@10@H_403_4@);@H_403_4@@H_403_4@

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

begin@H_403_4@@H_403_4@

DBMS_OUTPUT.put_line(v_Dates.Count);@H_403_4@@H_403_4@

DBMS_OUTPUT.put_line(V_Dates.last);@H_403_4@@H_403_4@

end@H_403_4@;@H_403_4@@H_403_4@

原文链接:https://www.f2er.com/oracle/213381.html

猜你在找的Oracle相关文章