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集合中的元素有保留顺序的,而其他两个保存到数据库,不保留顺序。
浙公网安备 33010602011771号