您的位置:首页 > 数据库 > Oracle

Oracle中集合的使用

2016-07-28 11:31 351 查看

集合

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

index-by表

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

type  tabletype 
IS  table 
of  INDEX 
BY  binaru_interger;
--typetable:定义的新类型类型名
--type:定义index-by表的类型
type  Country_Name 
IS  table 
of  COUNTRIES.COUNTRIES_NAME%TYPE
--声明使用类型
INDEX 
by  binary_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
type  StudyTab 
IS  table 
of  varchar(20) 
index  by 
binary_integer;
v_StudyTab  StudyTab;
begin
  --使用循环赋值
  for  v_Count 
IN  1..5 
Loop
    v_StudyTab(v_Count):=v_Count*100;
  end 
loop;
  --使用循环取值
  for  v_Count 
in  1..6 
loop
    DBMS_OUTPUT.put_line(v_StudyTab(v_Count));
  end 
loop;
end;
 
--上面赋值的时候只赋了5个值,但是取值的时候取了6个值,报错
--:未找到数据

嵌套表

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

--嵌套表声明语法
type  table_name 
IS  table 
of  table_type[not 
null];
 
--嵌套表的初始化
declare
type  StudyTab 
IS  table 
of  varchar(20);
v_StudyTab  StudyTab:=StudyTab('Tom','Jack','Rose');
begin
  for  v_Count 
IN  1..3 
loop
    DBMS_OUTPUT.put_line(v_StudyTab(v_Count));
  end 
loop;
end;
²  index-by表:如果声明类型之后,再声明一个index-by表变量类型,如果没有给

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

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

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

          

ERROR

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

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

 

元素的序列

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

declare
type  NumTab 
is  Table 
of  Numer(4);
v_Num  NumTab:=NumTab(1,2,4,5,7,9);
begin
  for  v_Count 
IN  1..6 
loop
    DBMS_OUTPUT.put_line('v_Num('||v_Count||')='||v_Num(v_Count));
  END 
LOOP
END;

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

可变数组

可变数组声明

---数组声明语法---
type  type_name 
IS  {varray|varying 
array}(maxinum_size)
  OF  element_type[not 
null];
--type_name:可变数组的类型名
--maxinum_size:可变数组元素个数的最大值
--element_type:数组元素的类型
 
---创建一个数组---
declare
--包含星期数组
type  Dates 
IS  varray(7) 
OF  varchar2(10);
--包含月份数组
type 
Months  IS 
varray(12) 
OF  varchar2(10);

---数组的初始化---
declare
type  Dates 
IS  varray(7) 
OF  varchar2(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
type  Dates 
IS  varray(7) 
OF  varchar2(10);
v_Dates  Dates:=Dates('Monday','Tuesday','Wednesday');
begin
  DBMS_OUTPUT.put_line(v_Dates.Count);
  DBMS_OUTPUT.put_line(V_Dates.last);
end;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: