3、使用集合。

1)、声明集合类型:

  a、声明关联数组集合类型:

  Type table_type_name Is Table Of DataType [not null] Index by index_type;

  其中table_type_name代表创建的集合类型名称,datatype是集合中元素的类型,index_type用来组织集合内容的索引的数据类型,not null代表集合中每一行必须有值。

  DataType集合元素的类型可以是标量数据类型(任何被PL/SQL支持的标量数据类型,如Varchar2,Clob,Positive,Date或者Boolean)、锚定数据类型(数据库表的列,之前已定义的变量或者带%TYPE属性的游标表达式推导出的数据类型)和负责的数据类型(oracle 9i R2以后,集合元素的类型可以是一个对象类型或者是一个集合类型)。

  Index_type用来定位集合中的保存的数据,oracle 9i R2以后,数据类型可以为Binary_Integer、Varchar2(N)或者Varchar2列或变量%TYpe锚定类型。如下:Index by Binary_integer\Pls_Integer\Positive\Natural\SignType\Varchar2(32767)\table.column%Type\curso.column%TYPE\package.variable%TYPE\package.subtype.

  声明示例: Type birthday_tt Is Table of Date Index by Pls_integer;---一个日期列表

        Type company_keys_tt Is Table of company.companyId%TYPE not null index by Pls_integer;--一个公司Id列表

          Type booklist_tt Is Table of books%ROWTYPE  index by  Natural---books表的局部拷贝,代表一个表的集合。元素的类型可以是记录。

        Type books_by_tt Is Table of books%RowType  index by books.autor%Type --每个集合都是按照作者名字进行组织的,索引就是作者的名字

        Type private_collection_tt Is Table of books_by_anthor_tt Index by varchar2(1000)  --- 集合的集合

  通常情况下,把定义集合类型的声明写在一个公共的package中,这样方便公共调用。

  b、声明嵌套表或者VARRAY:

  创建一个位于数据库内的(不只是在PL/SQL代码内)嵌套表数据类型:

  Create [or Replace] Type type_name As | Is Table Of element_type [not null];

  在PL/SQL 声明一个嵌套表:

  Type type_name Is Table of elememt_type [not null];

  创建一个位于数据库内的(不只是在PL/SQL代码内)的VARRAY数据类型:

  Create [or Replace] Type type_name As | Is Varray (max_elements) Of element_Type [not null]

  在PL/SQL声明一个VARRAY:

  Type type_name Is Varray(max_elements) Of element_type not null;

  删除一个类型:Delete Type type_name[ Force]

  其中:type_name 代表类型名称。

     [Or Replace]可以对已经存在的集合类型进行修改,不是先删除在创建,原来的权限会保留下来。

       element_type 元素的类型,可以是大部分的标量数据类型、对象类型、或者REF对象类型。如果集合的元素是对象,对象类型本书不能再带有一个集合属性,不能为的数据类型有:Boolean\NChar\NClob\Nvarchar2\REF Cursor\Table\Varray(非SQL数据类型)。、

  not null 代表不能有空元素

  max_elements Varray集合类型的最大数量,一旦声明了,这个数值不可以改变。

  Force:是否强制删除,不强制删除,有使用这个类型的引用的地方不可以删除。

  区别:嵌套表和关联数组在于嵌套表后面没有Index by语句,而嵌套表和Varray类型区别在于一个是使用了Varray关键字另一个是Varray规定了数据成员的数量。

  可以使用Alter Type来修改嵌套表和Varray类型。

  如:Alter type list_vat Modify limit 100 Invalidate ----修改Varrar类型的集合的最大数量。

2)、集合变量的声明和初始化:

  collection_name collection_type [:= collection_type(....)]

  collection_name变量名称,collection_type集合类型名称,collection_type(....)构造函数,初始化操作(嵌套表和Varray)

  嵌套表和Varray类型使用之前必须进行初始化,可以使用默认的构造函数初始化,如:

  my_favorite_colors color_tab_t:=color_tab_t();

  my_favorite_colors color_tab_t:=color_tab_t(“测试");---初始化,并且给第一个元素赋值,里面的参数可以用逗号隔开,依次给第二个...元素赋初始值。

  两个类型相同的变量可以相互赋值,类型相同指的是类型名称完全一样,即使类型声明的时候定义一样,类型名不一样也不能相互赋值。

  Varray集合中的元素有保留顺序的,而其他两个保存到数据库,不保留顺序。

 

 

 

 

posted on 2013-07-08 11:07  Kelly_HanShuai  阅读(137)  评论(0)    收藏  举报